C Tutorium – Debugging & Tracing – Knut Stolze Agenda Debugging & Debugger Tracing 2 Debugger Schrittweises Nachvollziehen der Logik eines Programms/einer Funktion Zugriff auf und Modifikation von Programmvariablen Programm muss nicht neu übersetzt oder verändert werden Debug-Informationen sind jedoch notwendig – Compiler-Option “-g” – Übersetzung mit Optimierung behindert Abbildung zwischen Kompilat und Quelltext nicht “-Ox” verwenden 3 Debugger (2) Bearbeiten von laufenden Programmen möglich – Debugger verbindet sich (“attach”) zu existierenden Prozess Analysieren von Core-Dateien – Art Log bei Programmabstürzen 4 Debugger – Funktionalität Run Starte Programm (evtl. mit Optionen) Breakpoint setzen Programm wird ausgeführt, bis die Stelle im Code bei der Ausführung erreicht wird; dann hält der Debugger das Programm an Next Gehe einen Schritt weiter in der Ausführung des Programms Step Steige in Unterfunktion hinab 5 Debugger – Funktionalität (2) Continue Setze Programm fort, bis zum nächsten Breakpoint Restart Starte Programm neu Backtrace Gib den Aufruf-Stack aus Print Variablen/Datenstrukturen anzeigen (global und lokal) Set Setze Wert einer Variable … 6 gdb Kommandozeilen-Debugger gdb <programm> – Help-Befehl ist sehr hilfreich Debugger sehr hilfreich, wenn keine graphische Oberfläche verfügbar Graphische Debugger meist besser und übersichtlicher – Quelltext, Variablen, Call-Stack, … werden parallel angezeigt 7 ddd Graphischer Debugger ddd <programm> 8 Debugger – Internas Debugger startet Programm – Debugger & Programm sind ein Prozess Debugger kann auch Speicher und Strukturen des Programms zugreifen Debugger verbindet sich zu laufendem Prozess – Debugger & Programm sind verschiedene Prozesse (Betriebssystem trennt klar beide Adressräume) spezielle Systemfunktion Erlaubt Zugriff auf Speicher anderer Prozesse Funktion nicht selber nutzen, da sehr schwierig zu handhaben und risikobehaftet Besondere Rechte notwendig 9 Tracing Programme werden nach der Entwicklung nicht mit Debug-Informationen ausgeliefert/verwendet; Programm wird i.A. auch noch optimiert Starten/Attachen eines Debuggers nicht möglich Nachvollziehen des Programmablaufs muss mit anderen Mitteln ermöglich werden 10 Tracing (2) Spezielle Komponente, die TraceInformationen bei Bedarf sammelt – Ist im fertigen Produkt mit vorhanden Informationen – Eintritt, Verlassen, und ausgewählte Zwischenpunkte/Daten 11 Tracing (3) Beispiel “System J” – DBJ_TRACE_ENTRY() – DBJ_TRACE_EXIT() – DBJ_TRACE_ACTIVE() – – – – DBJ_TRACE_DATA1(tracePoint, length1, data1) DBJ_TRACE_DATA2(tracePoint, length1, data1, length2, data2) DBJ_TRACE_DATA3(tracePoint, length1, data1, length2, data2, length3, data3) DBJ_TRACE_NUMBER(tracePoint, str, val) DBJ_TRACE_STRING(tracePoint, str) 12