Debugging mit PyCharm

You are here:

PyCharm ist eine beliebte integrierte Entwicklungsumgebung (IDE) für Python, die viele leistungsstarke Debugging-Funktionen bietet. In diesem Kapitel werden wir uns anschauen, wie Du PyCharm effektiv zum Debuggen Deiner Python-Anwendungen verwenden kannst.

Breakpoints setzen

Breakpoints sind eine grundlegende Debugging-Technik, die es Dir ermöglicht, die Ausführung Deines Codes an bestimmten Stellen zu unterbrechen. In PyCharm kannst Du einfach auf die Zeile klicken, auf der Du einen Breakpoint setzen möchtest, und das rote Kreissymbol erscheint am linken Rand.

def add(x, y):

    return x + y  # Breakpoint hier setzen

result = add(1, 2)

print(result)

Debuggen starten

Um den Debugger in PyCharm zu starten, klicke auf das grüne Dreieckssymbol in der oberen rechten Ecke und wähle “Debug”. Die Ausführung Deines Programms wird gestartet und am ersten Breakpoint angehalten.

Variablen und Ausdrücke untersuchen

Während die Ausführung angehalten ist, kannst Du den Wert von Variablen und Ausdrücken im “Variables”-Tab am unteren Rand des Bildschirms untersuchen. Du kannst auch die “Evaluate Expression”-Funktion (Alt + F8) verwenden, um Ausdrücke auszuwerten und den Wert von Variablen zu ändern.

Schrittweise Ausführung

Mit den Schritt-für-Schritt-Ausführungstasten in PyCharm kannst Du Deinen Code Zeile für Zeile ausführen und genau sehen, was in jeder Iteration passiert. Es gibt verschiedene Schritt-für-Schritt-Ausführungsarten:

– “Step Over” (F8): Führt die aktuelle Zeile aus und geht zur nächsten Zeile.

– “Step Into” (F7): Führt die aktuelle Zeile aus und geht in die Funktion oder Methode, die auf dieser Zeile aufgerufen wird.

– “Step Out” (Shift + F8): Führt den restlichen Code der aktuellen Funktion aus und geht zur nächsten Zeile nach dem Funktionsaufruf.

– “Run to Cursor” (Alt + F9): Führt den Code bis zur Zeile aus, auf der der Cursor steht.

Call Stack

Der Call Stack zeigt Dir die Reihenfolge der Funktionsaufrufe, die zur aktuellen Position im Code geführt haben. Du kannst auf einen Eintrag im Call Stack klicken, um den Kontext des Funktionsaufrufs und die Werte der Variablen zu diesem Zeitpunkt zu sehen.

Conditional Breakpoints

In PyCharm kannst Du auch Bedingungen für Breakpoints festlegen, sodass der Code nur angehalten wird, wenn die Bedingung erfüllt ist. Klicke mit der rechten Maustaste auf das Breakpoint-Symbol und wähle “Edit Breakpoint”, um die Bedingung festzulegen.

for i in range(10):

    if i % 2 == 0:

        print(i)  # Breakpoint hier setzen, Bedingung: i == 4

Ausnahme-Breakpoints

Ausnahme-Breakpoints ermöglichen es Dir, die Ausführung Deines Programms zu unterbrechen, wenn eine bestimmte Ausnahme auftritt, unabhängig davon, ob die Ausnahme abgefangen wird oder nicht. Um einen Ausnahme-Breakpoint hinzuzufügen, öffne das Breakpoints-Fenster (Ctrl + Shift + F8), klicke auf das Plus-Symbol und wähle “Python Exception Breakpoint”. Wähle die gewünschte Ausnahme aus und konfiguriere die Einstellungen nach Bedarf.

def divide(x, y):

    return x / y  # Ausnahme-Breakpoint für ZeroDivisionError hier setzen

try:

    result = divide(1, 0)

except ZeroDivisionError:

    print("Division durch Null ist nicht erlaubt.")

Remote Debugging

PyCharm ermöglicht auch das Remote Debugging von Python-Anwendungen, die auf anderen Computern oder Servern ausgeführt werden. Um dies zu tun, installiere den `pydevd-pycharm`-Paket auf dem Remote-Computer und füge den folgenden Code in Deiner Anwendung hinzu:

import pydevd_pycharm

pydevd_pycharm.settrace('localhost', port=12345, stdoutToServer=True, stderrToServer=True)

Richte dann in PyCharm einen “Python Remote Debug”-Konfiguration ein und starte den Debugger.

Mit diesen leistungsstarken Debugging-Funktionen in PyCharm kannst Du Deine Python-Anwendungen effizienter untersuchen und Fehler schneller beheben. Obwohl es anfangs etwas Zeit in Anspruch nehmen kann, sich mit den verschiedenen Funktionen vertraut zu machen, wird es sich langfristig auszahlen, da Du in der Lage sein wirst, Probleme schneller und einfacher zu identifizieren und zu beheben.