![[Logo der Universität Bayreuth]](../pictures/ubt-logo-l.gif)  
  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).
 
  
 
 
  
  
   
         |