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: nutzt ipdb (mit Syntax-Highlighting).
  • PYTHONBREAKPOINT=0: deaktiviert alle breakpoint()-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

Python Syntax
breakpoint(*args, **kwargs)
Parameter
*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:

Python Beispiel
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:

Bash Shell
# 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.py

Eigenen Hook installieren

Wer einen ganz eigenen Debug-Workflow möchte, ersetzt sys.breakpointhook direkt:

Python Beispiel
import sys
def my_hook(*args, **kwargs):
    print(f"[BREAKPOINT] args={args} kwargs={kwargs}")

sys.breakpointhook = my_hook
breakpoint("here", reason="test")
Output
[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:

Python Beispiel
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:

Bash pdb-Cheat-Sheet
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      # quit

Praktische Hinweise

  • Production-Safety: Nicht-versehentlich-deployte breakpoint()-Aufrufe lassen sich mit PYTHONBREAKPOINT=0 global 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.breakpointhook einmal setzen — z. B. in einem Test-Setup — und alle breakpoint()-Aufrufe gehen dorthin.
  • In Tests: Mit pytest lieber pytest --pdb aufrufen, das aktiviert pdb erst beim ersten Fehler.
  • Verwandte Tools: pdb, ipdb, pudb (TUI), web_pdb (Browser), debugpy (für VS Code), traceback.print_stack().
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht