PDB ist ein interaktiver Debugger, mit dem schrittweise durch den Code gegangen werden kann um Probleme aufzufinden.
Um einen einfachen Breakpoint zusetzen, kann folgendes angegeben werden:
import pdb; pdb.set_trace()
Anschließend sollte Zope neu im Vordergrund gestartet werden mit:
$ ./bin/instance fg
Anschließend sollte der Code ausgeführt werden, für den der Breakpoint gesetzt wurde. Das Terminal, in dem die Instanz gestartet wurde, sollte dann eine Debug-Session öffnen mit folgender Angabe:
-> Pdb().set_trace() (Pdb)
Sie können nun mit r (Return) den set_trace()-Aufruf verlassen und so schrittweise den Code untersuchen.
Wenn ein Fehler in einer Methode auftritt, die häufig ausgeführt wird, ist es jedoch nur lästig, sehr häufig Return angeben zu müssen. Daher empfiehlt sich, das sog. post-mortem-Idiom zu verwenden:
try: [YOUR CODE HERE] except: import pdb, sys e, m, tb = sys.exc_info() pdb.post_mortem(tb)
Anschließend sollte die Zope-Instanz wieder im Vordergrund gestartet werden. Nun wird pdb nur noch aufgerufen, wenn ein Fehler im Abschnitt [YOUR CODE HERE] auftritt.
Um zu gewährleisten, dass derselbe pdb-Breakpoint in einer Deubug-Session nicht mehrfach eine Exception ausgibt, kann die Variable PDB_ACTIVE auf 1 gesetzt werden:
if not globals().get( 'PDB_ACTIVE', 0 ): globals()['PDB_ACTIVE'] = 1 import pdb; pdb.set_trace()
Anmerkung: Entfernen Sie bitte wieder die debugging hooks bevor der Code in das Repository eingecheckt wird.
~/.pdbrc
Eine ~/.pdbrc-Konfigurationsdatei kann verwendet werden um sich einige Shortcuts zum Debuggen zu erstellen, z.B.:
# Print a sorted dictionary. # %1 is the dict # %2 is the prefix for the names. alias p_ for k in sorted(%1.keys()): print "%s%-15s= %-80.80s" % ("%2",k,repr(%1[k])) # Print the member variables of something alias pi p_ %1.__dict__ %1. # Print the member variables of self alias ps pi self # Print locals alias pl p_ locals() local: # Next list and step list alias nl n;;l alias sl s;;l
Um weitere Hilfsfunktionen in pdb nutzen zu können, lassen sich auch externe Python-Dateien in die ~/.pdbrc-Datei einbinden – siehe hierzu PdbRcIdea.
Zum Weiterlesen
- Python Documentation: Debugger Commands
- Verwendung von pdb
- Ken Manheimer: Conversing With Zope
- Ausführliche Anleitung für die Verwendung von pdb mit Zope
- Stephen Ferg: Debugging in Python
- Eine kurze praktische Einführung in pdb
- Jeremy Jones: Interactive Debugging in Python
- Eine ausführliche Anleitung mit fortgeschrittenen Beispielen