german/debugger.tex
Version 4.1
Dokument 1.3
20/08/1996
Dies ist eine kurze Übersicht über den Tcl-Debugger tdb. Das vorliegende Dokument kann sich ebenso wie tdb bis zur endgültigen Version noch ändern!
Softwareentwicklung mit Tcl/Tk ist eine einfache und schnelle Art um dem Anwender bestechende Programme in kurzer Zeit zur Verfügung stellen zu können. Dies bedeutet gegenüber Kompiler-Sprachen eine wesentliche Erleichterung. Dennoch kann man sich auch hier noch Verbesserungen im Arbeitsablauf des Programmierers wünschen.
Obwohl bei einem Interpreter die Kompilier- und Link-Phase wegfallen, ist der typische Entwicklungszyklus davon gekennzeichnet, daß nach dem Editieren das Programm gestartet wird, ein Fehler auftritt, dieser Fehler im Source mühsam gesucht und ausgebessert wird, das Programm erneut gestartet wird, der nächste Fehler auftritt...
Nun kann man sich gerade bei einer Programmierer-freundlichen Sprache wie Tcl fragen, wieso es für Compiler-Sprachen wie C gute Debugger gibt, für Tcl dagegen sowas bisher nur in Ansätzen (siehe das Kapitel Referenzen weiter unten) realisiert wurde.
Welche Anforderungen muß ein Debugger für Tcl erfüllen, damit er das Arbeiten mit der Sprache komfortabler, einfacher und schneller macht?
Der im folgenden genauer beschriebene Debugger tdb schließt diese Lücke und bietet dem Tcl-Programmierer schnellere und produktivere Applikationsentwicklung.
Mit tdb kann ein Programm in einer kontrollierten Umgebung ausgeführt werden. Der Benutzer kann das Programm schrittweise ausführen, Ablaufbedingungen überwachen, Datenstrukturen kontrollieren und die Wege des Programmes beobachten.
Der Debugger tdb ist normalerweise ein integraler Bestandteil der Entwicklungsumgebung, die von softWorks angeboten wird. Er kann jedoch genauso mit Programmen umgehen, die lediglich die softWorks-Bibliotheken benutzen. Selbstverständlich kann man ihn auch für Applikationen benutzen, die nur auf Tcl/Tk (und Zusatzpaketen zu diesen Programmen) aufbauen.
tdb bietet die meisten Funktionen, die auch von anderen Debuggern (z.B. gdb) angeboten werden. Man darf allerdings nicht übersehen, daß Tcl als interpretative Sprache doch Unterschiede zu anderen Sprachen aufweist und daher auch manche Debugger-Kommandos keine Analogie in entsprechenden Debuggern haben.
Die Grundfunktionen wurden jedoch bewußt an andere Debugger angelehnt, damit ein Anwender möglichst schnell mit dem Umgang des Debuggers vertraut wird (wer also beispielsweise gdb kennt, kann sofort loslegen). Manch andere Funktion hat jedoch kein Pendant, da hier Tcl selbst Möglichkeiten bietet, die andere Sprachen (wie C) nicht kennen (beispielsweise dynamisches Verändern des Codes während das Programm läuft).
Das Interface zum Emacs beruht nicht wie beim gdb auf einer Integration in den Emacs sondern auf ein kooperatives Miteinander der beiden Programme. Dies hat den Vorteil, daß das Benutzerinterface des Debuggers weiter verwendet werden kann und der Anwender wesentlich mehr Überblick behält. So können mit minimalem Aufwand auch andere Editoren angepaßt werden (sofern sie über entsprechende Kommunikationsschnittstellen verfügen).
Das Benutzerinterface von tdb unterstützt sowohl den Anfänger als auch den fortgeschrittenen Software-Entwickler durch einfache Menüs, entsprechende Kommandozeilenbefehle und auch durch das Vorhandensein einer komfortablen Erweiterungssprache (natürlich Tcl), in der neue Befehle für den Debugger implementiert werden können.
Die Hauptaufgabe eines Tcl-Debuggers ist sichtbar zu machen, was innerhalb eines anderen Programmes geschieht, während es abläuft. tdb übernimmt dabei folgende Aufgaben (sowie einige andere um diese zu unterstuetzen) um das Aufspüren von Bugs zu erleichtern:
Tcl-Scripts können ohne Änderungen auch unter tdb verwendet werden. Da daneben auch kein Kompilieren notwendig ist, kann tdb quasi als Entwicklungsumgebung verwendet werden. Das Script wird in den Debugger geladen und auf Fehler untersucht. Werden Bugs gefunden, können diese mit einem Editor ausgebessert und das Script (oder auch eine einelne Prozedur) wiederum nachgeladen werden. Der typische Entwicklungszyklus wird (besonders bei großen Programmen oder bei graphischen Applikationen) deutlich verkürzt, da das Programm nicht mehr neu gestartet werden muß.
tdb erlaubt eine weitgehende Kontrolle des Ablaufes eines Tcl-Scripts. Man kann sich schrittweise durch das Programm tasten, kann aber auch Subroutinen überspringen oder mit einem einzigen Befehl aus Routinen oder Schleifen zurückkehren. Über Breakpoints können gezielt gewisse Punkte des Programmes markiert werden, die dann vor einem kritischen Codestück einen Rücksprung in den Debugger erlauben.
Bei jedem Schritt kann der aktuelle Status des Programmes (Variablen, Prozeduren, Stack...) angezeigt werden. Skalar- und Feldvariablen können sowohl lokal als auch global verändert werden. So können kleine Fehler direkt im Programm ausgebessert werden. Die aktuelle Tcl-Prozedur wird sowohl im Source-Code als auch mit ausgewerteten Argumenten angezeigt. Ebenso erhalten Sie einen Überblick über die geladenen Source-Files und die darin definierten Prozeduren und Kommandos.
tdb kann direkt mit einem Editor zusammenarbeiten (wenn dieser erweiterbar ist und über Sockets kommunizieren kann). Die vorhandene Emacs-Anbindung ermöglicht dem Anwender das automatische Nachladen von Sourcen in den Debugger, sobald ein File im Editor gespeichert wird. Außerdem kann vom Debugger aus die Anzeige einer Prozedur im Editor bewirkt werden - beispielsweise wird bei einem Fehler automatisch das entsprechende File in den Editor geladen und der Cursor an den Anfang der Prozedur positioniert.
Der Debugger kann durch benutzerdefinierte Kommandos erweitert und verändert werden. Solche Kommandos können zum einen immer wiederkehrende Arbeitsabläufe zusammenfassen und zum anderen neue Funktionalitäten definieren. Kommandos können in Files gespeichert und von dort nachgeladen werden und sind selbst Tcl-Scripts. Diese Scripts haben vollständigen Zugriff auf das objektorientierte Grundgerüst des Debuggers.
Der Debugger kann direkt Unterprogramme des untersuchten Programmes ausführen (z.B. zur formatierten Ausgabe von Datenstrukturen) und er kann auch direkt einzelne Prozeduren untersuchen.
Das zweistufige Hilfesystem des Debuggers unterstützt sowohl Anfänger als auch fortgeschrittene Anwender. Zu jedem Kommando (auch zu benutzerdefinierten) gibt es einen kurzen Anwendungshinweis. Sollte dies nicht genügen, kann man über die kontextsensitive Hilfe-Funktion (oder den Hilfe-Index) in den Hypertext-Hilfe-Browser verzweigen, der zum Debugger und dessen Kommandos erschöpfende Auskunft erteilt.
Das graphische Benutzerinterface von tdb erlaubt den einfachen und intuitiven Umgang mit dem Debugger ohne auf eine schnelle und mächtige Kommandosprache (Tcl) zu verzichten.
Tcl selbst macht es nicht gerade leicht, einen Debugger zu entwickeln, der einerseits Tcl-Code untersuchen kann und andererseits dasselbe Tcl als Erweiterungssprache benutzt. Weiters ist es nahezu ein Ding der Unmöglichkeit, an manche wichtige Informationen zu gelangen ohne die Sourcen von tcl zu modifizieren.
Dies ergibt auch schon den wichtigsten Nachteil von tdb - Sie können ihren eigenen (eventuell modifizierten) Tcl-Interpreter (z.B. tclsh oder wish nicht zum debuggen verwenden. Außerdem müssen alle C-Code-Erweiterungen dynamisch nachladbar sein (es sollte allerdings auch schon lange keinen Grund für statische Bibliotheken mehr geben).
Das Programm tdb gibt es in zwei Versionen:
Diese Version ist voll funktionsfähig und entspricht im wesentlichen der kommerziellen Version in ihrem Leistungsumfang. Es fehlt die Anzeige des aktuellen Kontexts, die Verbindung zu einem Editor, das dynamische Nachladen von Sourcen und die Konfigurierbarkeit durch den Benutzer.
Für die Public-Domain-Version gibt es im Gegensatz zur kommerziellen Version keine Garantie, daß diese Software weiterhin verfügbar ist, weiterentwickelt wird oder daß Fehler behoben werden.
Diese Software darf solange frei benutzt, kopiert, modfiziert und weitergegeben werden, wie die Copyright-Angaben erhalten bleiben und der Anwender keinen Gewinn durch diese Tätigkeiten hat.
Diese Version ist voll funktionsfähig und enthält alle in der Einleitung beschriebenen Features. Mit dem Erwerb der Software kann der Anwender die Dienstleistungen von softWorks in Anspruch nehmen (Wartung, Anpassungen, Weiterentwicklungen). Fordern Sie unsere Preisliste an - oder starten Sie den Lizensierungs-Manager und wählen Sie tdb aus.
Diese Software darf vom Anwender, der die Software erworben hat, solange frei benutzt, kopiert und modfiziert werden, wie die Copyright-Angaben erhalten bleiben und kein Dritter diese Software verwendet.
Das Programm besteht aus diversen Teilen, die selbst gewissen Copyright-Beschränkungen unterliegen. Darunter fallen in erster Linie Tcl und seine Erweiterungen TclX, Tk, Blt und Tix.
Die entsprechenden Copyright-Bestimmungen können entweder bei den genannten Paketen, die alle frei im Internet erhältlich sind, eingesehen oder vom Author bezogen werden.
Der Author dieser Software übernimmt keinerlei Haftung für direkte oder indirekte Schäden, die durch die Benutzung dieser Software oder ihrer Dokumentation entstehen.
Weitere Informationen enthält das Dokument Allgemein Geschäfts- und Lieferbedingungen.
Soweit mir bekannt ist, gibt es folgende andere Tcl-Debugger:
Dies ist die erste allgemein ausgelieferte Version. Bei der Unterversion 3.2.1 handelt es sich um die Public-Domain-Version, 3.2.2 ist die kommerzielle Version
tdb verwendet mehrere Interpreter. Der entsprechende Code enthält in tcl7.5 in Verbindung mit dem I/O-System von Tcl noch Fehler, die teilweise zum Absturz von tdb führen. Dies verhindert auch die Ein-/Ausgabe des untersuchten Prozesses in ein Tcl-Fenster umzuleiten.
Das Debuggen von Event-Loop basierten Programmen kann zu (interessanten) Nebeneffekten führen. Dieses Problem tritt allerdings bei fast allen Debuggern auf. Generell verhält sich tdb hier sehr gutmütig.
Diese Version behebt einige Fehler und führt das Konzept des Plugins ein um die Fähigkeiten von tdb zu erweitern.
Tdb benutzt jetzt tcl7.5p1 und tk4.1p1. Dies behebt manche Fehler bezüglich Ein-/Ausgabe in mehreren Interpretern und erlaubt es jetzt, daß Ein-/Ausgaben des untersuchten Programmes in ein Fenster des Debuggers gehen.
Die kommerzielle Version ist beim Hochstarten deutlich schneller, da einige der Basisbibliotheken jetzt in C geschrieben sind. Diese Bibliotheken sind für Interessenten in Source-Form erhältlich.
Das Kommandozeileninterface ist jetzt einfacher.
Plugin-Module können die Fähigkeiten des Debuggers erweitern. Diese Module können aus C- und Tcl-Teilen bestehen und können direkt auf die Interna des Debuggers zugreigen. Die Modularisierung erlaubt es den eigentlichen Debugger klein zu halten und ihn dennoch speziell auf die Wünsche des Anwenders zuzuschneiden (z.B. um spezielle Datentypen zu untersuchen).
Derzeit gibt es zwei Plugins: Das script Plugin erlaubt die Aufzeichnung und das Abspielen von Debug-Sessions sowie das Hinzufügen neuer Kommandos zum Debugger. Dieses Modul ist in der kommerziellen Version enthalten.
Das andere Plugin fügt Popup-Menüs zu den Debugger-Fenstern hinzu. Sie können so direkt Breakpoints setzen, Variablen untersuchen oder den Source-Code von Prozeduren anzeigen indem Sie einfach in ein Debug-Fenster klicken.
Ein Plugin zur Anzeige und zum Untersuchen von Fenster-Hierarchien wird in Bälde erhältlich sein.