Universität Bayreuth
Mathematisches
Institut
Einleitung
Erste Schritte
Mail und News
Drucken
KDE
LaTeX/TeX
Linksammlung
Linuxtools
Netzwerk
Programmieren
Windows
X Window
Anträge
Kontakt
|
Fehlersuche mit dem Data Display Debugger (DDD)
schrittweiser Ablauf des Executables
Zur Ausführung in Einzelschritten gibt es im wesentlichen fünf
Befehle: next,
step,
until,
finish
continue
Alle diese Befehle sind durch die Kommando-Toolbar(Bild1) erreichbar.
|
Bild 1
|
-
Mit dem Befehl next können Sie in der gerade betrachteten
Funktion Zeile um Zeile weitergehen (nach einem Haltepunkt zum Beispiel).
Steht in einer Zeile ein Funktionsaufruf, so wird dieser als ganzes
ausgeführ und das Programm stoppt in der darauffolgenden Zeile wieder.
Der Debugger verzweigt dabei im Quelltextfenster nicht in die Funktion.
Bei next springt der Debugger also in die nächste Zeile
im Quelltext der aktuellen Funktion.
Eine variante zu next ist nexti (next Instruction). Dies
Kommando ist auch durch die Kommando-Toolbar erreichbar(Bild1).
nexti funktioniert fast genau so wie next aber mit
nexti
werden alle Anweisungen schrittweiser ausgeführt. Sie merken das
vielleicht nicht in der Konsole aber alles wird im Maschinencodefenster gezeigt. Sie können
beispielweise sehen alle Assembleranweisungen, die unter ein "
cout" stehen.
top
-
Der Befehl step funktioniert fast genauso wie next.
Steht in einer Zeile ein Funktionsaufruf, so springen Sie mit diesem
Befehl in die erste Zeile
der Funktion und können dort wieder zeilenweise debuggen.
Bei step springt der Debugger zur nächsten
Anweisung (also bei einem Funktionsaufruf in die erste
Zeile der aufgerufenen Funktion).
Das Problem bei dieser Vorgehenweise haben Sie vielleicht erkannt. Der Debugger
gerät beim Debuggen
tief in System-/Bibliotheksroutinen (z.B. beim Debuggen in
Funktionen von Systembibliotheken, die gar nicht mit Debug-Informationen
compiliert wurden). In diesem Fall versucht der Debugger, in die
überladene Operatorfunktion "<<" für die
Klasse ostream zu verzweigen. Dadurch verliert man schnell
den Überblick über den Ablauf des Programms, das im Debugger
abläuft (siehe Bild3).
Eine variante zu step ist stepi (step Instruction). Dies
Kommando ist auch durch die Kommando-Toolbar erreichbar(Bild1).
stepi funktioniert fast genau so wie step aber mit stepi
werden alle Anweisungen schrittweiser ausgeführt. Sie merken das
vielleicht nicht in der Konsole aber alles wird im Maschinencodefenster gezeigt. Sie können
beispielweise sehen alle Assembleranweisungen, die unter ein "
cout" stehen
Beispiel 3 (bsp3.cpp) |
|
|
Bild 3
|
Tipps: |
Benutzen sie next, wenn Sie sich schon in einer
Unterfunktion befinden, bis Sie den nächsten Funktionsaufruf
erreichen. Dort entscheiden Sie je nach Bedarf zwischen
next
und step.
|
top
-
Der Befehl until ist sehr ähnlich zu next. Den
Unterschied merkt man bei Schleifen. Wenn Sie sich am Ende einer Schleife
befinden (und eine weitere Iteration ansteht), gelangen Sie mit
next wieder an den Anfang. Wenn Sie jedoch until eingeben, werden alle noch
ausstehenden Iterationen auf einmal ausgeführt und das Programm stoppt in
der Zeile, die nach der Schleife kommt.
Beispiel 3 (bsp3.cpp)
Mit until |
|
|
Bild 4
|
Mit next |
|
|
Bild 5
|
top
-
Das Kommando finish dient dazu, die Funktion, in der Sie sich
gerade befinden, zu beenden. Sie springen aber nicht sofort
zurück. Alle Anweisungen werden bis zum regulären Ende der Funktion
abgearbeitet. Das Programm stoppt bei der nächsten Zeile in der
aufrufenden Funktion. Wenn Sie finish in der
main()-Funktion
eingeben, dann wird das Programm bis zum Ende ausgeführt.
top
-
Mit dem Befehl continue können Sie das Programm bis zum
nächsten Haltepunkt oder bis zum Ende laufen lassen. Das erfolgt durch
einen Click auf cont (im Werkzeugfenster).
Es gibt ein Variante von continue, damit Sie das Programm bis zum
Cursorzeichen laufen lassen können. Dafür wählen Sie im
Kontextmenü (öffnet sich durch Click auf die rechte Maustaste) vom
Quelltextfenster " Continue Until Here " (siehe Bild7). Dazu wird
automatisch ein temporärer Breakpoint erzeugt (siehe
Haltepunkt).
|