@@ -3,107 +3,107 @@ title: Debugging der Applikation
33weight : 30
44---
55
6- Auf dieser Seite werden die Grundlagen der Fehlersuche mit dem Setup aus [ dem ersten Kapitel] ({{< ref setup >}}) beschrieben. Es wird
7- Schritt für Schritt erklärt wie man den Debugger starten und verwenden kann.
6+ Auf dieser Seite werden die Grundlagen der Fehlersuche mit dem Setup aus [ dem ersten Kapitel] ({{< ref setup >}}) beschrieben. Dazu wird
7+ Schritt für Schritt erklärt, wie man den Debugger starten und verwenden kann.
88
99---
1010
1111### Applikation mit Debugger starten
1212
13- Zum Starten der Applikation mit Debugger werden die beiden Run Konfigurationenen ` crowpi-examples [debug] ` und ` Remote Debug ` benötigt.
14- Diese sind nach dem Setup bereits korrekt eingestellt und können verwendet werden. Wichtig dabei ist die Reihenfolge mit der die
13+ Zum Starten der Applikation mit Debugger werden die beiden Run Konfigurationen ` crowpi-examples [debug] ` und ` Remote Debug ` benötigt.
14+ Diese sind nach dem Setup bereits korrekt eingestellt und können verwendet werden. Wichtig dabei ist die Reihenfolge, mit der die
1515Konfigurationen gestartet werden. Dieses Vorgehen ist:
1616
17171 . Start von ` crowpi-examples [debug] ` ** ohne** Verwendung vom Debug-Knopf
18182 . Warten bis die Konsolenausgabe meldet ` Listening for transport dt_socket at address: 5005 (Attach debugger) `
19193 . Starten von ` Remote Debug `
2020
21- Nun dieser Ablauf nochmals kurz mit entsprechenden Abbildungen. Als erstes wird die Applikation im Debugmodus gestartet. Dazu muss die
21+ Nachfolgend wird der Ablauf mit entsprechenden Abbildungen ergänzt . Als Erstes wird die Applikation im Debugmodus gestartet. Dazu muss die
2222Konfiguration ` crowpi-examples [debug] ` angewählt werden. Gestartet wird die Konfiguration mit dem ** Play Button** .
2323{{< img alt="Debugmodus wählen und starten" src="basics/intellij-select-and-start-debug.JPG" >}}
2424
25- Als Schritt 2 wird nun gewartet bis die korrekte Augabe im Konsolenfenster erscheint. Das sieht dann so aus :
25+ Als Zweites wird nun gewartet, bis die korrekte Ausgabe im Konsolenfenster erscheint:
2626{{< img alt="App wartet auf Debugger" src="basics/intellij-waiting-for-debugger.JPG" height="500px" >}}
2727
28- Jetzt ist alles bereit um den Remote Debugger zu starten. Dazu die entsprechende Run Konfiguration ` Remote Debug ` auswählen und mit einem
29- Klick auf das Käfer-Icon (Debug) starten. Das Debugfenster meldet nun ob die Verbindung geklappt hat .
28+ Zum Starten des Remote Debugger die entsprechende Run Konfiguration ` Remote Debug ` auswählen und mit einem
29+ Klick auf das Käfer-Icon (Debug) starten. Das Debugfenster meldet nun, ob eine Verbindung hergestellt wurde .
3030{{< img alt="Remote Debug starten" src="basics/intellij-start-remote-debug.JPG" >}}
3131{{< img alt="Remote Debug verbunden" src="basics/intellij-debug-connected.JPG" >}}
3232
3333Nun kann zwischen den beiden Tabs ` Run ` und ` Debug ` hin und her gewechselt werden. Im Tab ` Run ` wird zum Beispiel die Ausgabe der
3434Applikation angezeigt. Bei ` Debug ` finden sich Knöpfe und Informationen zu Breakpoints und Variablen. Wenn nun ein Beispiel ausgeführt wird,
35- startet dies ganz normal und läuft bis das Programm beendet wird. Solange keine Breakpoints oder ähnliches im Programmablauf vorkommen hat
35+ startet dies ganz normal und läuft, bis das Programm beendet wird. Solange keine Breakpoints oder ähnliches im Programmablauf vorkommen, hat
3636der Debugger keinen weiteren Einfluss auf die Applikation.
3737
3838---
3939
4040### Einsatz von Breakpoints
4141
42- Wenn nun ein Problem auftritt, wird oft an der entsprechenden Codestelle ein Breakpoint gesetzt. Dieser Breakpoint weist den Debugger an die
43- laufende Applikation zu unterbrechen und den aktuellen Programmstatus auf dieser Zeile im Code auszugeben. Nun wird an der
44- Beispielapplikation [ 7-Segment Anzeige] ({{< ref "components/seven-segment" >}}) demonstriert wie ein Breakpoint verwendet werden kann.
45- Untersucht soll die Anzeige der ` - - - - ` werden. Wie im Beispielcode ersichtlich passiert die mit einem ` for-loop ` . Dieser wird nun genauer
42+ Wenn nun ein Problem auftritt, wird oft an der entsprechenden Codestelle ein Breakpoint gesetzt. Dieser Breakpoint weist den Debugger an, die
43+ laufende Applikation zu unterbrechen und den aktuellen Programmstatus auf dieser Zeile im Code auszugeben. An der
44+ Beispielapplikation [ 7-Segment Anzeige] ({{< ref "components/seven-segment" >}}) wird demonstriert, wie ein Breakpoint verwendet werden kann.
45+ Untersucht soll die Anzeige der ` - - - - ` werden. Wie im Beispielcode ersichtlich passiert dies mit einem ` for-loop ` . Dieser wird nun genauer
4646betrachtet.
4747
4848#### Setzen des Breakpoints an Codestelle
4949
5050Ein Breakpoint kann in IntelliJ sehr einfach durch Klicken neben die Zeilennummer in einem Programm eingefügt werden. Platziert wird der
51- Breakpoint hier bewusst vor den zu untersuchenden ` for-loop ` . So kann sichergestellt werden, dass nichts verpasst wird. Wenn nicht ganz
51+ Breakpoint hier bewusst vor den zu untersuchenden ` for-loop ` . So kann sichergestellt werden, dass nichts verpasst wird. Wenn nicht
5252genau bekannt ist, wo ein Problem verursacht wird, lohnt es sich fast immer den Breakpoint ein paar Zeilen über der kritischen Stelle zu
53- platzieren. So kann auch die Ausgangslage gut analysiert werden.
53+ platzieren. So kann die Ausgangslage gut analysiert werden.
5454{{< img alt="Breakpoint vor Loop gesetzt" src="basics/intellij-setbreakpoint-before-loop.JPG" >}}
5555
5656#### Starten der Applikation mit Debugger
5757
58- Wie bereits in den oberen Abschnitten erklärt wird, nachdem der Breakpoint platziert ist , die Applikation im Debugmodus gestartet und der
58+ Wie vorgängig erklärt, wird zuerst der Breakpoint platziert, die Applikation im Debugmodus gestartet und der
5959Debugger angehängt. Es werden also diese 3 Schritte durchgeführt:
6060
61- 1 . Start von `crowpi-examples [ debug] `` ** ohne** Verwendung vom Debug-Knopf
61+ 1 . Start von ` crowpi-examples [debug] ` ** ohne** Verwendung vom Debug-Knopf
62622 . Warten bis die Konsolenausgabe meldet ` Listening for transport dt_socket at address: 5005 (Attach debugger) `
63633 . Starten von ` Remote Debug `
6464
6565Da ein Fehler im 7-Segment Beispiel gesucht werden soll, wird das entsprechende Beispielprogramm nach Programmstart angewählt. Die Applikation
66- läuft sofort bis der Debugger am Breakpoint die Ausführung der Anwendung unterbricht.
66+ läuft sofort, bis der Debugger am Breakpoint die Ausführung der Anwendung unterbricht.
6767{{< img alt="Start von 7-Segment Beispiel" src="basics/intellij-start-sevensegment.JPG" >}}
68- Hier wird gezeigt wie nun die Ansicht in IntelliJ aussieht , wenn der Debugger das Programm unterbrochen hat und IntelliJ markiert die
68+ Nachfolgend die Ansicht in IntelliJ, wenn der Debugger das Programm unterbrochen hat. IntelliJ markiert die
6969entsprechende aktuelle Zeile im Programm. Im Debug-Tab werden zudem die aktuellen Variablen mit Werten der Applikation ausgegeben.
7070{{< img alt="Example stoppt an Breakpoint" src="basics/intellij-debugger-stopped-at-breakpoint.JPG" >}}
7171
7272#### Navigation am Breakpoint
7373
74- Um nun die Programmausführung schrittweise fortzusetzen, verfügt die Entwicklungsumgebung über verschiedene Funktionen. Zum einen gibt es
75- Grundfunktionen wie das Fortsetzen der Applikation oder das komplette Stoppen der Applikation. Die wichtigsten nun kurz erklärt:
74+ Um nun die Programmausführung schrittweise fortzusetzen, verfügt die Entwicklungsumgebung über verschiedene Funktionen. Diese beinhalten
75+ Grundfunktionen wie das Fortsetzen der Applikation oder das komplette Stoppen der Applikation. Die wichtigsten kurz erklärt:
7676
7777- ` Resume Program ` setzt das Programm fort bis zum nächsten Breakpoint oder Applikationsende
78- - ` Stop Remote Debug ` stoppt den Debugger. Da in diesem Setup jedoch die Applikation und der Debugger getrennt laufen, hat diese Optionen
78+ - ` Stop Remote Debug ` stoppt den Debugger. Da in diesem Setup jedoch die Applikation und der Debugger getrennt laufen, hat die Option
7979 keinen sinnvollen Effekt. Zum Stoppen des Programms sollte immer ` Stop All ` verwendet werden. Dies wird auf dem zweiten Bild gezeigt.
8080- ` Mute Breakpoints / Disable all Breakpoints ` der Debugger deaktiviert alle Breakpoints. So wird das Programm bei weiterer Ausführung nicht
8181 mehr unterbrochen.
8282 {{< img alt="Steuerung der Applikation" src="basics/intellij-application-controls.JPG" >}}
8383 {{< img alt="Stopp der Applikation" src="basics/intellij-stop-program.JPG" >}}
8484
85- Für die schrittweise Ausführung des Programms stellt der Debugger noch weitere Tasten zur Verfügung. Diese sind :
85+ Für die schrittweise Ausführung des Programms stellt der Debugger noch weitere Tasten zur Verfügung:
8686
87- - ` Step Over ` die nächste Anweisung im Code wird ausgeführt. Bei einem Methodenaufruf wird der Rückgabewert ermittelt ohne die Methode zu
87+ - ` Step Over ` die nächste Anweisung im Code wird ausgeführt. Bei einem Methodenaufruf wird der Rückgabewert ermittelt, ohne die Methode zu
8888 betreten.
8989- ` Step Into ` die nächste Anweisung im Code wird ausgeführt. Bei einem Methodenaufruf wird der Code der Methode geöffnet und das Debugging
9090 geht in der Methode weiter.
91- - ` Force Step Into ` die nächste Anweisung im Code wird ausgeführt. Bei einem Methodenaufruf welcher normalerweise Step Into ignoriert wird
92- das eintauchen in die Methode erzwungen.
93- - ` Step Out ` die aktuelle Methode wird ausgeführt bis der Code wieder am aufrufenden Ort angekommen ist. Wird zum vorzeitigen Rückkehren
91+ - ` Force Step Into ` die nächste Anweisung im Code wird ausgeführt. Bei einem Methodenaufruf, welcher normalerweise bei Step Into ignoriert, wird
92+ das Eintauchen in die Methode erzwungen.
93+ - ` Step Out ` die aktuelle Methode wird ausgeführt, bis der Code wieder am aufrufenden Ort angekommen ist. Wird zum vorzeitigen Rückkehren
9494 aus ` Step Into ` verwendet.
9595 {{< img alt="Navigation mit Debugger" src="basics/intellij-debug-navigations.JPG" >}}
9696
97- Noch genauere Erklärungen zu den einzelnen Funktionen können auch direkt in
98- der [ IntelliJ Anleitung] ( https://www.jetbrains.com/help/idea/stepping-through-the-program.html ) gefunden werden.
97+ Noch genauere Erklärungen zu den einzelnen Funktionen können auch direkt
98+ der [ IntelliJ Anleitung] ( https://www.jetbrains.com/help/idea/stepping-through-the-program.html ) entnommen werden.
9999
100100---
101101
102102### Analyse von Variablen
103103Inzwischen wurden einige Steps an der Codestelle des ` for-loops ` ausgeführt. Nun nochmals ein Blick auf die Variablenliste des Debuggers.
104- Im auf dem Bild kann nun erkannt werden wie der Debugger dem Benutzer anzeigt welche Variablen nun welche Werte haben. Aktuell ist es
104+ Im auf dem Bild kann erkannt werden, wie der Debugger dem Benutzer anzeigt welche Variablen nun welche Werte haben. Aktuell ist es
105105also: ` i=2 ` und ` state="- " `
106- Da der ` for-loop ` erst bei ` i > 5 ` stoppt könnte nun mit dem Debugger jede weitere Iteration nachvollzogen werden.
106+ Da der ` for-loop ` erst bei ` i > 5 ` stoppt, könnte nun mit dem Debugger jede weitere Iteration nachvollzogen werden.
107107{{< img alt="Variablen mit Debugger" src="basics/intellij-shows-variables.JPG" >}}
108- Auf genau diese Weise lassen sich auch Entscheidungen bei ` if (this) {then that} else {other things} ` nachvollziehen. Jede Variable kann
108+ Auf diese Weise lassen sich auch Entscheidungen bei ` if (this) {then that} else {other things} ` nachvollziehen. Jede Variable kann
109109auf ihren Zustand geprüft und somit bei Fehlentscheiden die Logik angepasst werden.
0 commit comments