Debuggen mit Eclipse

1. Übersicht

In dieser Kurzanleitung erfahren Sie, wie Sie Java-Programme mithilfe der Eclipse-IDE debuggen.

2. Grundlegende Konzepte

Eclipse bietet hervorragende Unterstützung für das Debuggen einer Anwendung. Es visualisiert die schrittweise Ausführung und hilft uns, Fehler aufzudecken.

Um die Debugging-Funktionen in Eclipse zu demonstrieren, verwenden wir ein Beispielprogramm PerfectSquareCounter . Dieses Programm zählt die gesamten perfekten Quadrate und sogar die perfekten Quadrate unter einer bestimmten Zahl:

public class PerfectSquareCounter { static int evenPerfectSquareNumbers = 0; public static void main(String[] args) { int i = 100; System.out.println("Total Perfect Squares: " + calculateCount(i)); System.out.println("Even Perfect Squares : " + evenPerfectSquareNumbers); } public static int calculateCount(int i) { int perfectSquaresCount = 0; for (int number = 1; number <= i; number++) { if (isPerfectSquare(number)) { perfectSquaresCount++; if (number % 2 == 0) { evenPerfectSquareNumbers++; } } } return perfectSquaresCount; } private static boolean isPerfectSquare(int number) { double sqrt = Math.sqrt(number); return sqrt - Math.floor(sqrt) == 0; } }

2.1. Debug-Modus

Zuerst müssen wir das Java-Programm in Eclipse im Debug-Modus starten. Dies kann auf zwei Arten erreicht werden:

  • Klicken Sie mit der rechten Maustaste auf den Editor und wählen Sie Debuggen unter -> Java-Anwendung (siehe Abbildung unten).
  • Debuggen Sie das Programm über die Symbolleiste (im folgenden Screenshot hervorgehoben).

2.2. Haltepunkte

Wir müssen die Punkte definieren, an denen die Programmausführung zur Untersuchung angehalten werden soll . Diese werden als Haltepunkte bezeichnet und gelten für Methoden. Sie können auch jederzeit vor oder während der Ausführung definiert werden.

Grundsätzlich gibt es drei Möglichkeiten, dem Programm Haltepunkte hinzuzufügen:

  • Klicken Sie mit der rechten Maustaste auf die Markierungsleiste (vertikales Lineal), die der Linie entspricht, und wählen Sie Haltepunkt umschalten (siehe Abbildung unten).
  • Drücken Sie Strg + Umschalt + B auf die notwendige Linie , während im Editor
  • Doppelklicken Sie auf die Markierungsleiste (vertikales Lineal), die der erforderlichen Linie entspricht

2.3. Code-Flow-Kontrollen

Nachdem der Debugger an den angegebenen Haltepunkten angehalten hat, können wir mit der weiteren Ausführung fortfahren.

Nehmen wir an, der Debugger befindet sich derzeit gemäß dem folgenden Screenshot in Zeile 16:

Die am häufigsten verwendeten Debug-Optionen sind:

  • Schritt in (F5) - Diese Operation erfolgt innerhalb der in der aktuellen Zeile verwendeten Methoden (falls vorhanden). Andernfalls wird mit der nächsten Zeile fortgefahren. In diesem Beispiel wird der Debugger in der Methode isPerfectSquare () verwendet.
  • Step Over (F6) - Diese Operation verarbeitet die aktuelle Zeile und fährt mit der nächsten Zeile fort. In diesem Beispiel wird die Methode isPerfectSquare () ausgeführt und mit der nächsten Zeile fortgefahren
  • Step Return (F7) - Diese Operation beendet die aktuelle Methode und bringt uns zurück zur aufrufenden Methode. Da wir in diesem Fall einen Haltepunkt in der Schleife haben, befindet er sich immer noch innerhalb der Methode, andernfalls würde er zur Hauptmethode zurückkehren
  • Fortsetzen (F8) - Dieser Vorgang wird einfach mit der Ausführung fortgesetzt, bis das Programm endet, es sei denn, wir erreichen einen weiteren Haltepunkt

2.4. Debug-Perspektive

Wenn wir das Programm im Debug-Modus starten, fordert Eclipse Sie auf, in die Debug-Perspektive zu wechseln. Die Debug-Perspektive ist eine Sammlung nützlicher Ansichten, mit denen wir den Debugger visualisieren und mit ihm interagieren können.

Wir können jederzeit manuell zur Debug-Perspektive wechseln.

Hier sind einige der nützlichsten Ansichten, die dies enthält:

  • Debug-Ansicht - Hier werden die verschiedenen Threads und Call-Stack-Traces angezeigt
  • Variablenansicht - Hier werden die Werte der Variablen an einem bestimmten Punkt angezeigt. Wenn wir die statischen Variablen sehen wollen, müssen wir das explizit angeben
  • Haltepunkte - Hier werden die verschiedenen Haltepunkte und Überwachungspunkte angezeigt (die wir unten sehen werden).
  • Debug-Shell - Dies ermöglicht es uns, benutzerdefinierten Code während des Debuggens zu schreiben und auszuwerten (ein Beispiel wird später behandelt).

3. Techniken

In diesem Abschnitt werden wir einige wichtige Techniken durchgehen, die uns helfen, das Debuggen in Eclipse zu meistern.

3.1. Variablen

Wir können die Werte von Variablen während der Ausführung in der Variablenansicht sehen. Um die statischen Variablen anzuzeigen, können Sie die Dropdown-Option Java -> Statische Variablen anzeigen auswählen .

In der Variablenansicht können Sie während der Ausführung einen beliebigen Wert auf den gewünschten Wert ändern.

Zum Beispiel, wenn wir ein paar Zahlen und direkt beginnen mit der Nummer 80 überspringen müssen, könnten wir das tun , indem Sie den Wert der Variablen zu ändern Nummer :

3.2. Werte überprüfen

Wenn Sie den Wert eines Java-Ausdrucks oder einer Java-Anweisung überprüfen müssen, können Sie den jeweiligen Ausdruck im Editor auswählen, mit der rechten Maustaste klicken und überprüfen, wie unten gezeigt. Eine praktische Verknüpfung ist das Drücken von Strg + Umschalt + I auf dem Ausdruck, um den Wert anzuzeigen:

In case we need to permanently inspect this expression, we can right-click and Watch. Now, this gets added to the Expressions view and the value of this expression can be seen for different runs.

3.3. Debug Shell

In the context of the debugging session, we can write and run custom code to evaluate possibilities. This is done in the Debug Shell.

For example, if we need to cross-check the correctness of the sqrt functionality, we could do it in the Debug Shell. On the code, Right-click -> Inspect to see the value:

3.4. Conditional Breakpoints

There will be cases in which we want to debug only for specific conditions. We can achieve this by adding conditions to a breakpoint in one of two ways:

  • Right-click on the breakpoint and choose Breakpoint Properties
  • In Breakpoint view, select the breakpoint and specify the condition

For example, we can specify the breakpoint to suspend the execution only if number is equal to 10:

3.5. Watchpoints

Whatbreakpoints are for methods, watchpoints are for class-level variables. In this current example, the breakpoint on evenPerfectSquareNumbers declaration is called a watchpoint. Now, the debugger will pause the execution every time the field is accessed or modified on a watchpoint.

This is the default behavior, which can be changed in the watchpoint's properties.

In this example, the debugger will stop execution every time a perfect square is an even number:

3.6. Trigger Points

Let's assume that we're debugging a complex issue in an application with a huge amount of source code. The debugger will keep suspending the flow due to scattered breakpoints.

When a breakpoint is marked as a trigger point, it means that the rest of the breakpoints will be enabled only if this breakpoint is hit.

For example, in the screenshot below, the breakpoint on isPerfectSquare() is supposed to be hit for every iteration in the loop. However, we've specified the breakpoint on calculateCount() method as a trigger point, along with a condition.

So, when the iteration count reaches 10, this will trigger the rest of the breakpoints. Hence, from now on, if the breakpoint on isPerfectSquare() is hit, the execution will get suspended:

3.7. Remote Debugging

Wenn die Anwendung außerhalb von Eclipse ausgeführt wird, können wir weiterhin alle oben genannten Funktionen verwenden, vorausgesetzt, die Remoteanwendung ermöglicht das Debuggen. In Eclipse würden wir Debug als Remote-Java-Anwendung auswählen .

4. Fazit

In dieser Kurzanleitung haben wir die Grundlagen und verschiedenen Techniken zum Debuggen von Programmen in Eclipse IDE kennengelernt.

Wie immer ist der in dieser Übung verwendete Quellcode über GitHub verfügbar.