Ich debugge statische multi-threaded x86-64 C++ - Anwendung unter Linux.gdb Schritt funktioniert nicht wie erwartet
Ich kann Haltepunkte auf Funktionen setzen und auf ihnen stoppen, und ich kann Schritt für Schritt über Funktion Körper gehen. Aber wenn ich versuche, in eine andere Funktion zu treten, hört gdb nicht auf, es zu beginnen, und es scheint, dass es gerade Ausführung fortsetzt. Wenn ich die Programmausführung unterbrechen, geht gdb Zustand gebrochen und wird unbrauchbar:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
Als Abhilfe, die ich als erwartet stepi
mehrmals statt step
, stepi
Werke nutzen können. Was könnte der Grund für dieses Verhalten sein? Gibt es Workarounds neben der Verwendung von stepi
? Ich verwende gdb 7.6 und gcc 4.7.1.
Haben Sie das Ziel mit '-ggdb' und' -O0' kompiliert? Haben Sie versucht, den Unterschied zwischen Schritt ('s') und nächstem (' n') zu beobachten? – Reinderien
@Reindienien, mein Ziel ist mit '-g' und' -O0' kompiliert. Wie kann ich den Unterschied zwischen 's' und' n' beobachten? – ks1322
Versuchen Sie es von '-g' nach' -ggdb' zu ändern. Um den Unterschied zu sehen, tippen Sie in gdb "s" (effektiv "einsteigen") gegen "n" (effektiv "übergehen"). – Reinderien