Weiter Zurück Inhaltsverzeichnis
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:
Bei Verwendung des internen Debuggers werden den Baum- und Ausgabeansichten drei Tabs hinzugefügt.
Ihnen stehen zwei normale und zwei Dropdown-Knöpfe zur Verfügung, sobald Sie den Debugger starten.
Wenn Sie den Debugger starten, werden die zehn Einträge zu Steuerung des Debuggers eingeschaltet.
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.
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.
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.
Benutzen Sie das eben beschriebene Menü um Unterbrechungen zu editieren. Es enthält die folgenden Einträge:
Entfernt alle Unterbrechungen für dieses Programm.
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.
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.
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.
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.
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