2012-01-30 11 views
8

Stavo eseguendo il debug di un determinato codice C++ con il tasto F11 (modalità Step Into) per capire l'ordine preciso in cui sono state richiamate le funzioni nel codice e ho realizzato che non entrerebbe mai in alcune funzioni a meno che non impostare un punto di interruzione su una riga all'interno della definizione della funzione.Perché la modalità di debug di Visual Studio Step Into (F11) a volte non entra in alcune funzioni?

Cioè, se chiamo una funzione dal metodo principale, e la funzione definita in un altro Cpp mi aspetto la modalità F11 debug per immettere passo passo all'interno della funzione per analizzare la variabile i cambiamenti. La maggior parte delle volte lo fa, ma in alcuni casi esegue semplicemente la funzione senza passarci sopra e salta alla riga successiva nel metodo principale.

Perché sta succedendo?

Esempio:

Questa è la funzione F11 avrebbe mai entrare:

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 
} 

Questo è il metodo principale dove F11 va di pari passo:

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 
} 

risposta

6

È necessario disporre di informazioni di debug per accedere a glutMainLoop. Quando nessun codice sorgente o nessuna informazione di debug è disponibile per glutMainLoop, il debugger non può visualizzare il codice sorgente. Quando si desidera eseguire il passaggio singolo di questa funzione è necessario aggiungerli entrambi.

In alternativa è possibile inserire a smontaggio utilizzando Maiusc - F11. Ma non penso che questo aiuterà in questo caso.

6

Vale quick check ..

In Visual Stu dio, andare a Strumenti>Opzioni ...

Cliccare debug sul lato sinistro

Sulla guardare a sinistra per Abilita Just My Code (gestito) se è selezionata, deselezionarla , premere "OK "

Per buona misura ho sempre esco VS e tornare indietro nel

+0

Sono stato deselezionato, ma grazie comunque. Quello che intendo è che mi aspettavo che quando F11 arriva alla riga 'glutMainLoop()' passi anche alla visualizzazione della funzione, ma lo fa solo se imposto un breakpoint all'interno del display (void). –

4

Quando passo t tramite il codice in CameraMain, si prevede di essere in grado di passare display alla chiamata a glutDisplayFunc(display);?

In tal caso, ciò non avviene perché la funzione display è non chiamata a quel punto. Invece viene salvato da GLUT per essere chiamato dall'interno del loop principale di GLUT. È necessario impostare un punto di interruzione nella funzione display per poterlo attraversare.

+0

Mi aspetto di essere in grado di visualizzare in 'glutMainLoop', ma come hai detto, è necessario un punto di interruzione. Perché? Accade sempre con i loop? –