KDbg - Benutzerhandbuch
Inhalt
Einleitung
KDbg ist eine grafische Benutzeroberfläche für gdb,
den GNU-Debugger.
Dieses Dokument bietet einige (leider wenige) Hinweise zur Benutzung
von KDbg.
Für die experimentierfreudigen Benutzer gibt's ein bisschen Dokumentation,
wie KDbg Typen versteht, etwa QString.
(Leider nur in englischer Sprache, aber das sollte kein Problem darstellen.)
Was gibt's hier zu sehen?
KDbg's Hauptfenster besteht aus vier Teilen:
Links oben wird der Quellcode angezeigt. Meistens werden Quellcode-Dateien
automatisch geöffnet. Mit Datei|Quellcode öffnen können
Sie Dateien manuell öffnen. Alle offenen Dateien werden im Menu Fenster
angezeigt, mit dem Sie auch gleich zwischen den offenen Dateien hin- und
herschalten können.
Links unten wird der Backtrace (Call Stack, Stack Frames), d.h.
die Funktionnen, die das Programm im Augenblick betreten und noch nicht
verlassen hat, angezeigt. Das innerste Frame (in dem sich das Programm
gerade befindet) befindet sich an erster Stelle. Klicken Sie auf ein Frame,
um die lokalen Variablen in diesem Frame anzuzeigen.
Rechts oben werden die lokalen Variablen angezeigt. Sobald das
Programm angehalten wird (z.B. durch einen Breakpoint), wird diese Anzeige
aktualisiert.
Rechts unten zeigt beliebige Ausdrücke an (diese bezeichnet
man auch als Watches). Ein neuer Ausdruck wird hinzugefügt,
indem dieser im Eingabefeld eingegeben wird und dann auf Neu geklickt
wird. Um einen Ausdruck zu entfernen, klicken Sie diesen an (an der Wurzel
des entsprechenden Baums) und klicken dann auf Entf.
Das Zahnrad in der Werkzeugleiste zeigt an, ob gdb gerade arbeitet:
Dies ist der Fall, wenn es rotiert. Solange es schnell rotiert, nimmt KDbg
kein Eingaben an; wenn es langsam rotiert, aktualisiert KDbg gerade alle
Variablenanzeigen.
Benutzung von KDbg
Um ein Programm zu debuggen, wählen Sie Datei|Programm.
Das Programm wird jetzt geladen. Ein xterm-Fenster wird geöffnet,
das die Ausgabe des Programms anzeigen wird. Wenn Sie einen Core-Dump
verwenden wollen, müssen Sie zuerst das Programm, das den Core-Dump
erzeugt hat wie gerade erwähnt laden, dann wählen Sie Datei|Core
dump aus dem Menu. Kdbg zeigt die Stelle an, die den Core-Dump verursacht
hat.
Mit dem Menupunkt Ausführung|Argumente können Sie auch
Programmargumente,
das Arbeitsverzeichnis sowie Umgebungsvariablen setzen..
Siehe
unten.
Im Menu Ausführung finden Sie Befehle, die Sie zum Ausführen
und schrittweisen Abarbeiten des Programms verwenden. Weiters können
Sie das laufende Programm unterbrechen. Die wichtigen Befehle können
auch mit Funktionstasten gegeben werden. Zum effizienten Arbeiten empfehle
ich, dass Sie sich diese Tasten eingewöhnen.
Diese Funktionen sind nicht konfigurierbar, aber vielleicht
wollen Sie ein Stückchen Code beisteuern, mit dem das geht?
Im Menu Haltepunkt finden Sie Befehle zum Setzen, Entfernen,
Aktivieren und Inaktivieren von permanenten und temporären Haltepunkten.
Sie können einen Haltepunkt auch setzen, indem Sie mit der Maus in
den Freiraum links der entsprechenden Quellcode-Zeile klicken (mit der
linken Maustaste); weiters können sie einen vorhandenen Haltepunkt
mit der mittleren Maustaste aktivieren und deaktivieren.
Im Menu Ansicht finden Sie Befehle, um verschiedene Fenster zu
öffnen und zu schließen. Bei diesen handelt es sich um dockende
Fenster, die Sie in beliebiger Weise anordnen können.
Die Liste der Haltepunkte
Die Liste der Haltepunkte können Sie mit dem Menupunkt Ansicht|Haltepunkte
anzeigen. Diese zeigt für jeden Haltepunkt folgendes an: Den Ort,
die Anzahl der Stopps, die Anzahl der nächsten zu ignorierenden Stopps
(falls gesetzt) sowie eine Haltebedingung (falls gesetzt). Das Piktogramm
links zeigt an, ob der Haltepunkt aktiviert (tiefroter Punkt) oder deaktiviert
(hellroter Punkt) ist, ob es sich um einen temporären Haltepunkt handelt
(eine winzige Uhr ist sichtbar) und ob der Haltepunkt bedingt ist (ein
Fragezeichen ist sichtbar).
Sie können eine Bedingung (sodass das Programm nur stehen
bleibt, wenn die Bedingung erfüllt ist) oder die Anzahl der zu ignorierenden
Stopps (sodass das Programm die nächsten n Male nicht stehen bleibt,
die es über diesen Haltepunkt läuft) setzen. Dazu wählen
sie den Schalter Bedingt und geben die Anzahl der zu ignorierenden
Treffer und/oder die Bedingung ein.
Programmargumente, Arbeitsverzeichnis, Umgebungsvariablen
setzen
Mit Ausführen|Argumente öffnen Sie einen Dialog, in dem
Sie Programmargumente, das Arbeitsverzeichnis sowie Umgebungsvariablen
setzen können.
In der obersten Eingabezeile können Sie die Programmargumente eingeben,
die an das Programm übergeben werden sollen. Diese werden beim nächsten
Programmstart verwendet.
Im Eingabefeld darunter können Sie das Arbeitsverzeichnis angeben.
Dieses wird sofort an gdb übergeben, sobald Sie OK drücken.
Das Programm verwendet das neue Arbeitsverzeichnis allerdings erst beim
nächsten Start.
Im Bereich für Umgebungsvariablen können Sie einen Ausdruck
in der Form
VARIABLE=Wert eingeben und dann Ändern
klicken, um der Umgebungsvariablen VARIABLE einen Wert
zuzuweisen. Um eine Variable zu entfernen, wählen Sie diese zuerst
aus der Liste darunter aus und klicken dan Löschen. Um einen
Wert zu ändern, geben Sie einfach den neuen Wert ein und klicken Ändern.
Wenn Sie den Namen der Variable ändern und Ändern clicken,
erzeugen Sie eine neue Variable! Die neuen Umgebungsvariablen werden erst
beim nächsten Programmstart verwendet.
Wenn Sie glibc2 unter Linux verwenden, ist es sehr wichtig, dass Sie
der Umgebungsvariablen LD_BIND_NOW den Wert 1 zuweisen.
Wenn diese Variable nicht gesetzt ist, können solche Funktionen nicht
betreten werden, die von der Bibliothek libc und anderen Shared
Libraries importiert werden.
Globale Einstellungen
Mit dem Menupunkt Datei|Globale Einstellungen können Sie folgende
Optionen einstellen:
-
den Befehl, mit dem gdb aufgerufen wird;
-
den Befehl, der das Fenster für die Programmausgabe öffnet,
-
ob KDbg in den Vordergrund kommen soll, sobald das Programm stoppt, und
eine Verzögerung, wann er sich wieder zurückzieht,
-
die Tabulatorweite.
Aufruf von gdb
Wenn Sie eine alternative Version von gdb verwenden wollen, geben sie diese
unter Aufruf von GDB an. Die Standardeinstellung ist gdb -fullname
-nx. Achtung: Sie müssen jedenfalls diese beiden Argumente übergeben;
wenn Sie sie weglassen, kann KDbg nicht funktionieren. Wenn Sie das Eingabefeld
leer lassen, wird die Standardeinstellung verwendet.
Aufruf eines Terminal-Emulators
Falls Sie ein anderes Terminal-Programm verwenden wollen, das die Ausgabe
des Programms anzeigt, geben Sie dieses unter Terminal für die
Programmausgabe an. Die Standardeinstellung ist xterm -name kdbgio
-title %T -e sh -c %C. In diesem Eintrag wird %T durch eine
Überschrift und %C durch ein Bourne-Shell-Skript ersetzt,
das in eine Endlosschleife landet, damit sich das Fenster nicht schließt.
(Keine Sorge, das Skript frisst keine CPU-Zeit, sondern ruft einfach nur
sleep
3600 in einer Schleife auf :) Eine alternative für diesen Eintrag
wäre zm Beispiel konsole -nowelcome -name kdbgio -caption %T -e
sh -c %C.
In den Vordergrund
Sie können angeben, ob das KDbg-Fenster in den Vordergrund gebracht
werden soll, sobald das kontrollierte Programm anhält (bei einem Breakpoint
oder wegen eines Signals). Das Fenster wird allerdings nicht aktiviert
(zumindest nicht unter KWM, dem Window Manger von KDE). Manche Benutzer
werden dieses Verhalten als störend empfinden, weshalb diese Option
standardmässig ausgeschaltet ist.
Wenn diese Option eingeschaltet ist, zieht sich das KDbg-Fenster auch
wieder in den Hintergrund zurück, sobald das Programm fortgesetzt
wird. Allerdings geschieht das erst nach einer Verzögerung, die ebenfalls
angegeben werden kann. Dadurch wird verhindert, dass das Fenster ständig
nach hinten und vorne blinkt, sobald Sie einen Einzelschritt-Befehl absetzen.
Tips und Tricks
-
Setzen Sie immer die Umgebungsvariable LD_BIND_NOW=1 auf glibc2-Systems.
Siehe
oben.
-
Sie können Haltepunkte als Lesezeichen verwenden: Setzen Sie einfach
einen Haltepunkt und deaktivieren Sie diesen. Später können Sie
rasch an die entsprechende Stelle zurückkehren, indem Sie in der Liste
der Haltepunkte doppel-klicken (oder Code anzeigen klicken).
Da sich KDbg alle Haltepunkte über Sitzungen hinaus merkt, werden
sie sofort wieder gesetzt, sobald sie das entsprechende Programm das nächste
Mal debuggen.
-
Auf folgende Weise können Sie Programmvariablen ändern: Im Watch-Bereich
(rechts unten) geben Sie eine Zuweisung ein, z.B. var.member=17
und Klicken Neu. Die entsprechende Variable wird sofort geändert.
Sie sollten die Variable nun sofort löschen (indem Sie sie auswählen
und Entf klicken). Das ist notwendig, weil der Ausdruck (d.h die
Zuweisung) sonst bei jedem Programmstopp ausgewertet wird.
-
Sie können Werte im Watch-Bereich in den verschiedenen Formaten anzeigen
lassen, die gdb versteht. Z.B. zeigt /x var.member die Variable
var.member
in hexadezimaler Notation an.
Bekannte Probleme
gdb 4.16 hat Probleme bei der Handhabung von C++-Klassen mit virtuellen
Basisklassen. (Diese kommen häufig in CORBA-Programmen vor.) Gdb stürzt
dabei häufig aufgrund eines Speicherzugriffsfehlers ab. KDbg erkennt,
wenn gdb unerwartet beendet wird. Leider lässt sich nicht wirklich
was dagegen unternehmen. Sie müssen gdb mittels Datei|Programm
neu starten, das heißt auch für die Debug-Sitzung zurück
an den Start :-(.
Die Typerkennung von KDbg arbeitet nur, wenn die Bibilotheken dynamisch
ins Programm gebunden sind.
Autor
KDbg wurde von Johannes Sixt
mit vielen weiteren Helfern geschrieben.
Die KDbg-Homepage befindet sich unter http://members.telecom.at/~johsixt/kdbg.html.