The K Desktop Environment

Weiter Zurück Inhaltsverzeichnis

12. Debuggen einer Anwendung

12.1 Einstellungen

Standardmäßig verwendet KDevelop den internen Debugger. Dies kann unter "Einstellungen" geändert werden. Wählen Sie "KDevelop setup" und dann "Debugger" .

Aktivieren Sie das Kontrollkästchen "Verwende externen Debugger", wenn Sie einen anderen Debugger verwenden wollen und geben Sie den Namen des externen Debuggers ein. Zur Bedienung Ihres Debuggers konsultieren Sie bitte die entsprechende Dokumentation.

Bei Auswahl des internen Debuggers erhalten Sie eine Anzahl zusätzlicher Optionen aus denen Sie auswählen können:

12.2 Verwendung des internen Debuggers

Änderungen in den Baum- und Ausgabeansichten

Bei Verwendung des internen Debuggers werden den Baum- und Ausgabeansichten drei Tabs hinzugefügt.

In der Baumansicht

In der Ausgabeansicht

Änderungen im Debugmenü und im Panel

Im Panel

Ihnen stehen zwei normale und zwei Dropdown-Knöpfe zur Verfügung, sobald Sie den Debugger starten.

Im Debugmenü

Wenn Sie den Debugger starten, werden die zehn Einträge zu Steuerung des Debuggers eingeschaltet.

Verfügbare Funktionen:

Details

Unterbrechungen

Unterbrechungen können auf Quellcodezeilen gesetzt werden (sog. Breakpoints), oder auch auf Variablen (sog. Watchpoints) . Beide Arten von Unterbrechung können jederzeit gesetzt werden, Watchpoints auf lokale Variablen sind jedoch nur im jeweiligen Gültigkeitsbereich von Bedeutung. Sinnvoller ist die Verwendung von Watchpoints für globale Variablen.

Setzen/Löschen von Unterbrechungen

Klicken Sie im Editor in der gewünschten Zeile den schmalen "Icon"-Rand auf der linken Seite des Quelltextes an, um eine Unterbrechung zu setzen. Nochmaliges Klicken entfernt die Unterbrechung wieder.

Alternative Manipulation der Unterbrechungen via Menü

Wenn Sie den Breakpoint entweder im Editor oder in der Breakpointliste mit der rechten Maustaste anklicken, öffnet sich ein Menü mit Optionen. Dort können Sie die Unterbrechung entfernen oder editieren, oder alle Unterbrechungen löschen.

Editieren von Unterbrechungen

Benutzen Sie das eben beschriebene Menü um Unterbrechungen zu editieren. Es enthält die folgenden Einträge:

  1. Bedingung: Geben Sie eine Bedingung an, die erfüllt sein muß, damit gdb die Programmausführung unterbricht.
  2. Ignoriere die nächsten: Wie oft der Code den Breakpoint passieren soll, bevor gdb die Programmausführung unterbricht.
  3. Aktivieren: Wenn das Kontrollfeld aktiviert ist, hält gdb an dieser Stelle an, sonst wird der Breakpoint ignoriert.

Alle Breakpoints löschen

Entfernt alle Unterbrechungen für dieses Programm.

Setzen/Löschen von Watchpoints

Klicken Sie in der Variablenansicht mit der rechten Maustaste auf eine Variable. Es öffnet sich ein Popup Menü in dem Sie einen Watchpoint auf diese lokale Variable setzen können. Diese Funktionalität ist auf den Gültigkeitsbereich dieser Variablen eingeschränkt. Sobald der Gültigkeitsbereich verlassen werden soll, wird das Programm angehalten und der Watchpoint gelöscht.

WARNUNG: Dies ist als problematisch bekannt. Seien Sie also vorsichtig, wenn Sie Unterbrechungen auf lokale Variablen setzen.

Eine Unterbrechung kann auch gesetzt werden, indem Sie mit der rechten Maustaste auf eine vorher eingegebene Unterbrechung klicken und "Watchpoint umschalten" auswählen.

Setzen/Löschen von Watch Variablen

Am unteren Ende der Variablenansicht befindet sich das "Watch"-Feld in dem man den Variablennamen eingeben kann, den man sich in der Watchliste anzeigen lassen will. Geben Sie den Variablennamen gefolgt von <RETURN> ein oder klicken Sie auf "Hinzufügen" . Ein Klick mit der rechten Maustaste auf den Variablennamen in der Baumansicht öffnet ein Menü, in dem Sie die Variable wieder aus der Liste entfernen können.

Sie können eine Watchvariable auch eingeben, indem Sie mit der rechten Maustaste im Editorfenster auf den Variablennamen klicken. Dies öffnet ein Popoup Menü mit einem "Beobachten : Variablenname" Eintrag.

Ändern von Variablenwerten

Das ändern von Variablenwerten erfolgt mit Hilfe einer Watchvariablen. Wenn Sie eine Variable "test" haben, können Sie die Variable auf 5 setzen, indem Sie im Watch-Feld "test=5" eingeben und die Variable zur Liste hizufügen. Beachten Sie, daß "test" JEDESMAL auf 5 gesetzt wird, wenn das Programm an dieser Stelle angehalten wird. Sie sollten eine Variable deshalb wieder aus der Liste entfernen nachdem sie einmal gesetzt worden ist.

12.3 Die schwebende Werkzeugleiste

Die schwebende Werkzeugleiste ist ein Feature des internen Debuggers, das den Komfort beim Debuggen von GUI Anwendungen erheblich verbessert. Die Werkzeugleiste "schwebt" entweder über allen angezeigten Fenstern, oder sie ist in die Kontrolleiste gedockt. Wenn sie gedockt ist, können Sie den Code durch anklicken des gedockten Icons ausführen. Die dabei ausgeführte Funktion ist die "Step Over" Funktion. Mit Hilfe der rechten Maustaste können sie die Werkzeugleiste wiederherstellen und optional KDevelop den Fokus geben.

Zusätzlich zu den Funktionen des Debugmenüs, bietet die schwebende Werkzeugleiste zwei weitere Funktionen an:

Wenn gdb das Programm unterbricht, weil z.B. ein Breakpoint erreicht wurde, wird "Setze Fokus auf KDevelop" mit einem Highlight versehen. Wir geben nicht automatisch KDevelop den Fokus, damit Sie die Ausgabe Ihres Programmes sehen können. Klicken Sie auf "Setze Fokus auf KDevelop" oder einen anderen Knopf um die gewünschte Funktion auszuführen.

12.4 Dynamische Bibliotheken und Unterbrechungen

Die Verwendung Breakpoints innerhalb von dynamischen Bibliotheken führt zu einem Problem, für das es eine annehmbare Lösung gibt. Das Problem ist, daß gdb keine Breakpoints akzeptiert, die innerhalb des Quellcodes einer dynamischen Bibliothek liegen, solange diese noch nicht mittels dlopen geöffnet wurde.

Die Lösung besteht darin, gdb dazu zu bringen uns zu benachrichtigen, wenn eine dynamische Bibliothek geöffnet wurde. Das heißt, wenn der Benutzer dort eine Unterbrechung setzt, markieren wir dies als "in der Schwebe", und wenn gdb anhält, weil die Bibliothek geöffnet wurde, versuchen wir die Breakpoints zu setzen. Ist dies erfolgreich, wird die Unterbrechung als aktiv markiert, wenn nicht, bleibt der Breakpoint "schwebend". In jedem Falle wird anschließend ein "continue" ausgeführt.

Dies ist als "lazy breakpoints" bekannt.

Dennoch müssen Sie vorsichtig sein. Wenn Sie versehentlich eine Unterbrechung in einer Datei setzen, die absolut nichts mit Ihrem Programm zu tun hat, sie gehört also weder zu Ihrem Programm noch zu irgendeiner dynamischen Bibliothek Ihres Projektes, wird dieser Breakpoint immer "schwebend" bleiben. Dies kann nicht verhindert werden, da er zu einer dynamischen Bibliothek gehören könnte.

Das Problem der "schwebenden" Unterbrechungen ist folgendes: Wenn Sie "Über Funktion" in einer Codezeile anwenden, die ein dlopen enthält oder zu einem dlopen führt, kann man nicht vorhersagen was passieren wird. Das dlopen wird von gdb abgefangen, wodurch die Ausführung unterbrochen wird. Nun gibt es zwei Möglichkeiten, entweder gibt es dort "schwebende" Breakpoints, dann werden Sie als aktiv markiert und das anschließende "continue" führt zu diesem Punkt. Oder es gibt keine, dann führt "continue" bis zur nächsten Eingabeaufforderung oder direkt zum Programmende. Nichts von dem ist das, was erwartet wurde. Aus diesem Grund wird bei "Über Funktion" kein "continue" ausgeführt, sondern das Programm bleibt angehalten und der "Gestoppt" Zustand wird in der Statuszeile angezeigt. Der Framestack befindet sich in der Routine die den Stop verursacht hat.

Es gibt keinen Ausweg aus dieser Situation, aber so konnte das Problem ein wenig abgemildert werden.

Weiter Zurück Inhaltsverzeichnis