2009-10-17 4 views
7

druckt Ich habe mich umgesehen, konnte aber nicht herausfinden, wie man das Ergebnis einer Auswertung in gdb ausdrucken kann. also beispielsweise in dem folgenden Code:gdb - wie man das Ergebnis der Auswertung für C++

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

(oben ich versuche, ein mögliche Verfahren aus für alphabetische Reihenfolge für Streicher Überprüfung und war nicht ganz sicher, es funktioniert richtig)

jetzt i MIN_KNOTEN beobachten und sehen konnte, Wenn sich der Wert ändert, aber in einem komplizierteren Code, ist dies manchmal komplizierter. Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, die Auswertung eines Tests auf der Leitung zu beobachten, wo gdb/program flow derzeit ist.

vielen dank!

Antwort

16

In gdb gibt es kein single stepping auf Expressionsebene, wenn Sie danach fragen.

sind Ihre Optionen (von am häufigsten zu den meisten selten verwendet):

  1. bewerten den Ausdruck in gdb, print strcmp(current_node->word,min_node->word) tun. Überraschenderweise funktioniert das: gdb kann Funktionsaufrufe auswerten, indem es Code in das laufende Programm einfügt und 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. Anweisungslevel ausführen (Assembly) single-stepping (ni/si). Wenn die Aufrufanweisung abgeschlossen ist, finden Sie das Ergebnis in einem Register entsprechend den Prozessorkonventionen (% eax on 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.
+0

großartig, danke - das hilft! – nero

4

Sie können einfach versuchen, in den Typ:

Aufruf "my_funtion()"

soweit ich rember, obwohl es nicht funktionieren wird, wenn eine Funktion inlined wird.