2012-01-30 12 views
8

Kodda yer alan işlevlerin tam olarak ne zaman verildiğini anlamak için F11 anahtarında (Step Into modu) verilen bir C++ koduyla hata ayıklanıyordum ve 'un hiçbir zaman bir işlev girmediğini fark ettim. işlev tanımının içinde bir satırda bir kesme noktası ayarlayın.Neden Visual Studio'nun Debug modu Step Into (F11) bazen bazı işlevlerin içine girmiyor?

Ben ana yönteminden bir işlev çağırırsanız, ortalama ve fonksiyon ben F11 ayıklama modu değişkeni analiz amacıyla işlev içinde adım adım girmek için bekliyoruz başka .cpp tanımlanır değişir. Çoğu zaman bunu yapar, ancak bazı durumlarda bu fonksiyonu devreye girmeden yürütür ve ana yöntemdeki bir sonraki satıra atlar.

Bu neden oluyor?

Örnek: Bu fonksiyon F11 adım asla değildir

:

void VirtualCamera::display (void) { 
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Clear the background of the window 
    glClear(GL_COLOR_BUFFER_BIT); //Clear the colour buffer (more buffers later on) 
    glLoadIdentity(); // Load the Identity Matrix to reset our drawing locations 

    glTranslatef(0.0f, 0.0f, -5.0f); 
    renderPrimitive(); // Render the primitive 

    glFlush(); // Flush the OpenGL buffers to the window 
} 

Bu F11 adım adım giden ana yöntemdir:

void VirtualCamera::CameraMain(int argc, char **argv){ 
    glutInit(&argc, argv); // Initialize GLUT 
    glutInitDisplayMode (GLUT_SINGLE); 
    glutInitWindowSize (500, 500); // Set the width and height of the window 
    glutInitWindowPosition (100, 100); // Set the position of the window 
    glutCreateWindow ("OpenGL Window"); // Set the title for the window 

    glutDisplayFunc(display); // Tell GLUT to use the method "display" for rendering 
    glutReshapeFunc(reshape); 

    glutMainLoop(); // Enter GLUT's main loop 
} 

cevap

6

GlutMainLoop'a girmek için hata ayıklama bilgisine ihtiyacınız var. GlutMainLoop için herhangi bir kaynak kodu veya hata ayıklama bilgisi mevcut değilse, hata ayıklayıcı kaynak kodunu görüntüleyemez. Bu işlevi tek adımda yapmak istediğinizde, her ikisini de eklemeniz gerekir. F11 -

Alternatif Shift kullanarak söktüğünüzde girebilirsiniz. Ama bunun bu durumda yardımcı olacağını düşünmüyorum.

6

Görülmeye Değer hızlı onaylama ...

Visual Stu'da dio bu işaretliyse Sadece benim kod (Yönetilen) Enable işaretini kaldırın>Seçenekler ...

tıklayın için sol görünüm üzerinde sol tarafında

üzerinde HataAraçlar gitmek "OK"

hep VS çıkıp t adım atarken

+0

İşaretlenmemiştim, ancak yine de teşekkürler. Demek istediğim, F11'in "glutMainLoop()" satırına gelmesi de işlev ekranına adım atmasını beklediğimi, ancak yalnızca ekranın içinde bir boşluk bıraktığımda (void) bunu beklememdir. –

4

geri gitmek iyi ölçmek için vurmak CameraMain kodunu kullanarak, glutDisplayFunc(display); numaralı çağrıya display numarasına girmeyi umuyor musunuz?

Bu durumda, display işlevinin, bu noktada çağrılan değil işlevi olmaması nedeniyle gerçekleşmez. Bunun yerine GLUT ana döngüsünün içinden çağrılacak GLUT tarafından kaydedilir. İçinde gezinmek için display işlevinde bir kesme noktası ayarlamanız gerekir.

+0

"glutMainLoop" içine adım atmayı bekliyorum, ama dediğiniz gibi, bir kesme noktası gereklidir. Neden? Her zaman döngülerle olur mu? –

İlgili konular