Wie kann das Ergebnis der C ++ - Auswertung mit GDB gedruckt werden?

7

Ich habe mich umgeschaut, konnte aber nicht herausfinden, wie man das Ergebnis einer Auswertung in GDB ausdrucken kann. Zum Beispiel im folgenden Code:

%Vor%

(oben habe ich eine mögliche Methode zur Überprüfung der alphabetischen Reihenfolge für Strings ausprobiert, und war nicht absolut sicher, dass es richtig funktioniert.)

Jetzt konnte ich min_node sehen und sehen, ob sich der Wert ändert, aber bei mehr Code ist das manchmal komplizierter. Ich frage mich, ob es eine einfache Möglichkeit gibt, die Auswertung eines Tests auf der Linie zu beobachten, wo GDB / Programmablauf gerade ist.

    
nero 17.10.2009, 20:55
quelle

2 Antworten

16

In gdb gibt es kein einziges Einzelschrittverfahren auf Expressionsebene, wenn Sie danach fragen.

Ihre Optionen sind (von den meisten bis zu selten verwendeten):

  1. Bewerten Sie den Ausdruck in gdb , indem Sie print strcmp(current_node->word,min_node->word) ausführen. Überraschenderweise funktioniert das: gdb kann Funktionsaufrufe auswerten, indem es Code in das laufende Programm einfügt und es den Code ausführt. Natürlich ist das ziemlich gefährlich, wenn die Funktionen Nebenwirkungen haben oder abstürzen können; in diesem Fall ist es so harmlos, dass die Menschen normalerweise nicht an mögliche Probleme denken.
  2. Führe Anweisungsebene (Assembly) single-stepping (ni / si) aus. Wenn die Aufrufanweisung abgeschlossen ist, finden Sie das Ergebnis in einem Register entsprechend den Prozessorkonventionen (% eax auf x86).
  3. Bearbeiten Sie den Code, um Variablen Zwischenwerte zuzuweisen, und teilen Sie diese in separate Zeilen / Anweisungen auf. Verwenden Sie dann reguläres Single-Stepping und überprüfen Sie die Variablen.
Martin v. Löwis 17.10.2009, 21:04
quelle
4

Sie können einfach versuchen, einzugeben:

rufe "my_funtion ()"

auf

soweit ich mich erinnere, obwohl es nicht funktioniert, wenn eine Funktion inline ist.

    
yves Baumes 17.10.2009 21:03
quelle

Tags und Links