Debugging von Java-Code: Techniken und Werkzeuge für Profis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Debugging von Java-Code: von „Warum funktioniert es nicht?“ bis „Ich habe den Prozess im Griff“

\n\n

Jeder Java-Entwickler kennt dieses Gefühl: Sie starten die Anwendung, sie stürzt mit einer NullPointerException ab, und der Stack-Trace führt ins Nichts. Oder, noch schlimmer, der Code funktioniert, liefert aber völlig andere Ergebnisse als erwartet. Kommt Ihnen das bekannt vor? Willkommen in der Welt des Debuggings. Es ist nicht nur die Suche nach Fehlern – es ist die Kunst zu verstehen, was Ihr Programm tatsächlich tut.

\n\n

In diesem Artikel schauen wir uns an, wie Sie Java-Code wie ein Profi debuggen. Sie erfahren etwas über fortgeschrittene Techniken, die Ihnen Stunden an Nerven sparen, und über Werkzeuge, die das Debugging von einer lästigen Pflicht in eine spannende Detektivarbeit verwandeln. Los geht's!

\n\n

1. Die Basis: Breakpoint – Ihr bester Freund

\n\n

Beginnen wir mit dem Offensichtlichsten: den Haltepunkten. Aber blättern Sie nicht gleich weiter – Sie werden überrascht sein, wie viele Entwickler nur 10 % ihrer Möglichkeiten nutzen.

\n\n

1.1. Zeilen-, bedingte und Ausnahme-Breakpoints

\n\n

In IntelliJ IDEA (und anderen modernen IDEs) gibt es drei grundlegende Typen:

\n\n
    \n
  • Zeilen-Breakpoint – wird auf eine Codezeile gesetzt. Das Programm hält jedes Mal an, wenn es diese Zeile erreicht.
  • \n
  • Bedingter Breakpoint – Sie geben eine Bedingung vor (z. B. i == 5). Der Halt erfolgt nur, wenn die Bedingung wahr ist. Das rettet einen in Schleifen mit einer Million Iterationen.
  • \n
  • Ausnahme-Breakpoint – fängt den Moment ein, in dem eine bestimmte Ausnahme ausgelöst wird (z. B. NullPointerException). Er wird nicht auf eine Zeile, sondern auf einen Fehlertyp gesetzt. Sehr nützlich, wenn die Ausnahme irgendwo tief in einer Bibliothek auftritt.
  • \n
\n\n

Beispiel für das Setzen eines bedingten Breakpoints:

\n\n
public class Main {\n    public static void main(String[] args) {\n        for (int i = 0; i < 100; i++) {\n            // Breakpoint setzen, Bedingung: i == 42\n            System.out.println("Iteration: " + i);\n        }\n    }\n}
\n\n

Wenn die Schleife die 42. Iteration erreicht, hält der Debugger an. Die anderen 99 Male läuft er ohne Unterbrechung durch.

\n\n

1.2. Watchpoints: Felder überwachen

\n\n

Sie müssen herausfinden, wer und wann den Wert eines Feldes ändert? Verwenden Sie einen Watchpoint (Beobachtungspunkt). Sie setzen ihn auf ein Klassenfeld, und der Debugger hält bei jedem Lesen oder Schreiben dieses Feldes an.

\n\n
public class User {\n    private String name; // Watchpoint auf dieses Feld setzen\n\n    public void setName(String name) {\n        this.name = name; // Halt hier\n    }\n\n    public String getName() {\n        return name; // Oder hier, wenn der Lesemodus aktiviert ist\n    }\n}
\n\n

2. Java-Debugging-Werkzeuge: Was im Arsenal sein sollte

\n\n

Die gute Nachricht: Sie benötigen keine externen Tools, wenn Sie eine moderne IDE haben. Aber deren Möglichkeiten zu kennen, ist ein Muss.

\n\n

2.1. IntelliJ IDEA Debugger: Versteckte Funktionen

\n\n

Hier sind einige Funktionen, die das Debugging von Java-Code zum Vergnügen machen:

\n\n
    \n
  • Drop Frame (Schaltfläche in Form eines Abwärtspfeils) – ermöglicht es, die Ausführung zur vorherigen Methode im Aufrufstapel „zurückzusetzen“. Sie ändern den Programmzustand nicht, können aber die Logik erneut durchgehen. Unverzichtbar, wenn Sie einen wichtigen Schritt verpasst haben.
  • \n
  • Evaluate Expression (Alt+F8) – Sie können während des Debuggens beliebigen Code ausführen. Möchten Sie wissen, was list.size() zurückgibt? Oder sogar den Wert einer Variablen im laufenden Betrieb ändern? Bitte sehr.
  • \n
  • Hot Swap (heiße Code-Auswechslung) – haben Sie eine Methode geändert und möchten sie ohne Neustart testen? IntelliJ IDEA unterstützt den heißen Austausch von Klassen. Funktioniert nicht für alle Änderungen (z. B. kann kein neues Feld hinzugefügt werden), aber für den Methodenrumpf ist es ideal.
  • \n
\n\n

2.2. Alternativen: Eclipse, VS Code und JDB

\n\n

Wenn Sie Eclipse verwenden, gibt es dort ähnliche Funktionen: die Display-Ansicht für Ausdrücke und Drop to Frame. In VS Code mit Java Ex

Blogs

Buchempfehlungen