Warum kommt der Debug-Modus von Visual Studio (F11) manchmal nicht in einige Funktionen?

8

Ich habe einen gegebenen C ++ Code mit der F11 Taste (Step Into Modus) getestet, um die genaue Reihenfolge zu verstehen, in der die Funktionen im Code aufgerufen wurden, und ich erkannte, dass es war würde niemals in einige Funktionen eintreten, außer ich setze einen Haltepunkt auf eine Zeile innerhalb der Funktionsdefinition.

Ich meine, wenn ich eine Funktion von der Hauptmethode aufrufen und die Funktion in einer anderen .cpp definiert bin, erwarte ich, dass der F11 Debugging-Modus Schritt für Schritt eintritt innerhalb der Funktion, um die Variablenänderungen zu analysieren. Die meiste Zeit es tut, aber in einigen Fällen führt es nur die Funktion aus, ohne darin zu gehen, und springt zur nächsten Linie in der Hauptmethode.

Warum passiert das?

Beispiel:

Dies ist die Funktion, in die F11 niemals eintreten würde:

%Vor%

Dies ist die Hauptmethode, bei der F11 Schritt für Schritt geht:

%Vor%     
Jav_Rock 30.01.2012, 14:51
quelle

3 Antworten

6

Sie benötigen Debuginformationen, um den glutMainLoop einzugeben. Wenn für glutMainLoop kein Quellcode oder keine Debuginformationen verfügbar sind, kann der Debugger den Quellcode nicht anzeigen. Wenn Sie diese Funktion einzeln ausführen möchten, müssen Sie beide hinzufügen.

Alternativ können Sie mit Shift - F11 die Disassemblierung aufrufen. Aber ich denke nicht, dass dies in diesem Fall helfen wird.

    
harper 30.01.2012, 15:16
quelle
6

Verdient einen schnellen Check ..

Wechseln Sie in Visual Studio zu Tools & gt; Optionen ...

Klicken Sie auf Debugging auf der linken Seite

Auf der linken Seite nach Nur meinen Code aktivieren (verwaltet) , wenn es markiert ist, deaktivieren Sie es, drücken Sie " OK "

Für eine gute Maßnahme schließe ich immer VS und geh zurück in

    
curtisk 30.01.2012 15:05
quelle
4

Gehen Sie beim Durchlaufen des Codes in CameraMain davon aus, dass Sie beim Aufruf von display ? in glutDisplayFunc(display); treten können?

In diesem Fall passiert das nicht, weil die Funktion display an diesem Punkt nicht aufgerufen wird . Stattdessen wird es von GLUT gespeichert, um von innerhalb der GLUT-Hauptschleife aufgerufen zu werden. Sie müssen in der Funktion display einen Haltepunkt setzen, um einen Schritt zu durchlaufen.

    
Some programmer dude 30.01.2012 15:11
quelle