Die Python-Funktion breakpoint() (seit Python 3.7) startet den Standard-Debugger an der aufrufenden Codestelle — in Vanilla-Python ist das pdb. Über die Umgebungsvariable PYTHONBREAKPOINT lässt sich der Debugger global austauschen — etwa durch ipdb, pudb oder web_pdb. Damit ist breakpoint() der saubere Ersatz für das alte import pdb; pdb.set_trace().
Einleitung
Vor Python 3.7 schrieb man Debug-Stops als zweizeilige Beschwörung: import pdb; pdb.set_trace(). Das war hässlich, leicht zu vergessen und hart-codiert auf pdb. Mit breakpoint() reicht ein Funktionsaufruf — und der Debugger ist konfigurierbar:
- Default:
pdb.set_trace()wird aufgerufen. PYTHONBREAKPOINT=ipdb.set_trace: nutztipdb(mit Syntax-Highlighting).PYTHONBREAKPOINT=0: deaktiviert allebreakpoint()-Aufrufe — perfekt für Production-Deploys.
breakpoint(*args, **kwargs) reicht alle Argumente an die sys.breakpointhook-Funktion weiter. Das macht breakpoint() auch für eigene Debug-Helfer nutzbar.
Syntax
breakpoint(*args, **kwargs)*args, **kwargs Werden an sys.breakpointhook(...) weitergereicht. Der Default-Hook ignoriert sie und ruft pdb.set_trace() auf.
Rückgabewert
None (oder was der Hook liefert). breakpoint() ist nur wegen seines Seiteneffekts (Debugger starten) interessant.
Beispiele
Standard-Debugger starten
Der einfachste Use-Case: an einer interessanten Stelle breakpoint() einfügen — pdb übernimmt:
def average(values):
total = sum(values)
breakpoint() # → pdb startet hier
return total / len(values)
average([10, 20, 30])Debugger via Env-Variable austauschen
Mit PYTHONBREAKPOINT lässt sich der Debugger zentral umstellen — ohne den Code anzufassen:
# ipdb statt pdb
PYTHONBREAKPOINT=ipdb.set_trace python script.py
# web_pdb (debug via Browser)
PYTHONBREAKPOINT=web_pdb.set_trace python script.py
# Alle breakpoint()-Aufrufe deaktivieren
PYTHONBREAKPOINT=0 python script.pyEigenen Hook installieren
Wer einen ganz eigenen Debug-Workflow möchte, ersetzt sys.breakpointhook direkt:
import sys
def my_hook(*args, **kwargs):
print(f"[BREAKPOINT] args={args} kwargs={kwargs}")
sys.breakpointhook = my_hook
breakpoint("here", reason="test")[BREAKPOINT] args=('here',) kwargs={'reason': 'test'}Praktische Beispiele
Bedingten Breakpoint setzen
Mit einer einfachen if-Bedingung pausiert der Debugger nur, wenn der relevante Fall eintritt:
for i, item in enumerate(huge_list):
if item.id == "broken":
breakpoint()
process(item)Kurzer pdb-Spickzettel
Sobald pdb aktiv ist, helfen diese Befehle am meisten — h zeigt jederzeit die volle Hilfe:
n # next — eine Zeile weiter (über Funktionen drüber)
s # step — in die nächste Funktion hinein
c # continue — bis zum nächsten breakpoint
l # list — Code rund um aktuelle Zeile zeigen
p var # print — Wert einer Variable
pp var # pretty-print
w # where — Stack-Trace
u / d # up / down im Stack
q # quitPraktische Hinweise
- Production-Safety: Nicht-versehentlich-deployte
breakpoint()-Aufrufe lassen sich mitPYTHONBREAKPOINT=0global ausschalten. - Editor-Integration: Die meisten IDEs (VS Code, PyCharm) haben Breakpoints im UI —
breakpoint()ist vor allem für CLI-Skripte oder Remote-Debug nützlich. sys.breakpointhookeinmal setzen — z. B. in einem Test-Setup — und allebreakpoint()-Aufrufe gehen dorthin.- In Tests: Mit
pytestlieberpytest --pdbaufrufen, das aktiviert pdb erst beim ersten Fehler. - Verwandte Tools:
pdb,ipdb,pudb(TUI),web_pdb(Browser),debugpy(für VS Code),traceback.print_stack().