Technik

Technik

Was ist Debuggen und wie macht man das mit eclipse

Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Programmieren ist der wichtigste Teil des Informatikstudiums. Java ist hier immer noch sehr beliebt, wobei jeder Student sich mit der Programmiersprache irgendwann einmal herumschlagen muss. Viele greifen dabei zur IDE eclipse, doch annähernd genauso viele wissen gar nicht, was man mit eclipse alles machen kann und dieses Programm zu mehr macht als nur einem relativ langsamen und überladenen Texteditor.

Wenn man nämlich mal an dem Punkt angelangt ist, dass der Compiler sich nicht mehr über irgendwelche Syntaxfehler beklagt, dann kommt man oft in die Situation, dass sich bei der Ausführung Probleme ergeben, wie beispielsweise die immer wieder sehr beliebte “ArrayIndexOutOfBoundsException”, die den Programmierer darauf hinweist, dass er irgendwo einen Denkfehler gemacht hat und auf etwas zugreifen will, das nicht existiert. Und hier wird es jetzt interessant, denn eclipse bietet mit seinem Debugger eine gute Möglichkeit, um solchen Fehlern ein wenig auf den Zahn zu fühlen. Wenn jetzt Fragezeichen aufgetaucht sind und die Frage “Was zum Geier ist ein Debugger?” im Raum steht, spätestens dann lohnt es sich jetzt hier weiterzulesen.

Was kann der Debugger?

Wenn ein Programm ausgeführt wird (also von der Java Virtual Machine interpretiert wird), dann läuft es einfach so lange durch, bis es entweder fertig ist oder einen Fehler produziert. Mittels des Debuggers kann man das Programm gezielt während der Ausführung anhalten und einen Blick ins Innere der Virtual Machine werfen. Konkret heißt das, dass man beispielsweise die Variablenbelegungen zum Zeit der Ausführung begutachten kann.

Wie starte ich den Debugger?

Zuerst mal muss man sich klarmachen, dass es nur dann Sinn macht den Debugger zu starten, wenn man eine grobe Idee hat, wo man genauer hinschauen will. Wenn man nämlich einfach direkt statt auf “Run” auf “Debug” drückt, um das Programm auszuführen, passiert nichts Besonderes, sondern es wird eben einfach das Programm ausgeführt und nach der Ausführung beendet. Das ist natürlich nicht der Sinn der Sache.

Bevor man den Debugger startet muss man einen oder mehrere sogenannte Breakpointssetzen. Das sind Haltepunkte, an denen der Debugger die Ausführung unterbricht und uns den Blick ins Innere ermöglicht. Um solche Haltepunkte zu setzen, gibt es in eclipse mehrere Möglichkeiten. Die einfachste ist, neben der Zeile, in der man anhalten möchte, auf die Leiste einen Doppelklick zu machen, die normalerweise die Symbole für Warnungen und Fehler enhält. Dort erscheint dann ein blauer Punkt.

Solche Punkte kann man soviele setzen, wie man möchte. Wenn man sie mit einem Rechtsklick erwischt, dann gibt es in diesem Menü auch die Möglichkeit Breakpoints zu deaktivieren. Das ist während eines Debugvorgangs oft die bessere Idee als den Punkt direkt wieder zu entfernen.

Nun ist es an der Zeit den Debugger zu starten. Dies geht über das Symbol “Debug” direkt neben dem Icon “Run”, mit dem man normalerweise die Ausführung des Programms veranlasst. (Passenderweise ist das Icon mit einem Käfer versehen.) Wenn man einfach auf den Button klickt, wird der Debugger mit der zuletzt verwendeten Einstellung aus dem “Run”-Menü gestartet. Man kann auch direkt auswählen, dass man als Java-Applikation debuggen möchte. Das geht absolut äquivalent wie das simple Starten des Programms:

Wenn man einen Breakpoint gesetzt hat, dann fragt eclipse während der Ausführung, ob man in die “Debug-Perspektive” wechseln möchte. Das sollte man bestätigen und am besten direkt auch den Haken setzen, damit eclipse nicht wieder nachfragt. Nun erscheint eine neue Übersicht, die viel mehr Informationen enthält, als die vorherige. Um zur einfachen Ansicht zurückzukehren, kann man oben rechts auf “Java” klicken. Jetzt mal eine kurze Erklärung zu den einzelnen Komponenten von links oben nach rechts unten:

  • Debug: Dieser Bereich enthält den Stack der aktuellen Ausführung. Aus diesem Fensterchen kann man ersehen, welche Methoden gerade im Moment aufgerufen wurden und dazu geführt haben, dass der aktuelle Breakpoint erreicht wurde. Außerdem findet man hier die Schaltfläche (grüner Pfeil nach rechts), mit dem man den nächsten Auswertungsschritt einleiten kann, sowie den Button, um die Ausführung abzubrechen (rotes Quadrat).
  • Variables: Der vielleicht interessanteste Teil der Debug-Perspektive. Hier kann man sich die zum aktuellen Ausführungszeitpunkt belegten Variablen und natürlich die Werte anschauen.
  • Quelltext: Das ist ja nichts Neues bis auf die Tatsache, dass hier immer die aktuelle Zeile hervorgehoben wird, in der die Ausführung angehalten wurde. Hier kann man auch noch während des Debuggens Breakpoints setzen und entfernen. Veränderungen am Code wirken sich allerdings erst nach einem Neustart des Debuggers aus.
  • Outline: Ebenfalls ein bekanntes Element aus der üblichen Java-Perspektive.

Über die Möglichkeit schrittweise durch die Ausführung einer Schleife genau zu verfolgen, was mit den Werten passiert etc., kann man meistens sehr gut Fehlerquellen ermitteln, die man vielleicht vorher nicht bedacht hat. Auch bei Rekursionen kann das sehr nützlich sein, da im “Debug”-Fenster als Stack aufgezeigt wird, welche Methoden aufgerufen wurden und man sich so genauer ein Bild davon machen kann, was genau der Quelltext, den man zwar selber verfasst, aber vielleicht nicht ganz verstanden hat, eigentlich wirklich auslöst.

Zum Schluss kann ich nur empfehlen einfach mal mit dem Debugger herumzuspielen und vielleicht auch mal gezielt ein paar Fehler zu verursachen und sie zu beobachten. Während des normalen Programmierens treten zwar normalerweise auch genug Fehler auf, um Routine zu bekommen im Debuggen, aber da sollte es nach Möglichkeit dann schon etwas leichter von der Hand gehen, da man doch eher nicht die Zeit oder den Nerv hat sich mit den Details des Debuggers auseinanderzusetzen.

 

Search