[Logo der Universität Bayreuth]
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) <-




          <-  Start des ddd

<-  Beschreibung des ddd-Fensters

<-  Laden einer Core-Datei

<-  Start eines Programms im DDD

<-  Ausgabe vom Programmcode

<-  Haltepunkt (Breakpoint)

<-  schrittweiser Ablauf des Executables
  1. Next
  2. Step
  3. Until
  4. Finish
  5. Continue

<-  Verfolgung der Aufrufkette

<-  Untersuchung von Variablen

<-  dynamische Veränderung des Wertes einer Variablen

<-  Beenden des ddd







schrittweiser Ablauf des Executables

Zur Ausführung in Einzelschritten gibt es im wesentlichen fünf Befehle: •next, •step, •until, •finishcontinue
Alle diese Befehle sind durch die Kommando-Toolbar(Bild1) erreichbar.

die Kommando-Toolbar
Bild 1



  • Next

    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.

    Beispiel 3 (bsp3.cpp) DDD-Konsole
    Bild 2

    top top



  • Step

    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) DDD-Konsole
    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 top



  • Until

    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 DDD-Konsole

    Bild 4
    Mit   next DDD-Konsole
    Bild 5



    top top

  • Finish

    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.

    Beispiel 3 (bsp3.cpp) DDD-Konsole
    Bild 6


    top top

  • Continue

    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).

    Beispiel 3 (bsp3.cpp) Das Kompakte ddd-Fenster
    Bild 7



    top top

Robert Baier ([e-mail-Adresse von Robert Baier])
© 2003 Robert Baier;
© 1999-2002 Robert Baier, Sascha Herrmann
Debugger-Seiten: © 2003 Robert Baier, Ekue-sse Situ Tomety
[Seitenzähler] Last modified: 22.07.2015