Skip to content
mcdonc edited this page Oct 9, 2011 · 5 revisions

Help me (Chris) create a resource for new users to learn PDB effectively. I'll use the result of our efforts as a PyCon talk, to be recorded, so we can point new users at the result.

PDB is an interactive debugging environment for Python programs. It allows you to pause your program, look at the values of variables, and watch program execution step-by-step, so you can understand what your program is actually doing, as opposed to what you think it's doing.

Effectively using PDB is arguably the most important skill a new Python developer can learn. This talk will show novice and intermediate Python users how to use PDB to troubleshoot existing code.

  • When is it reasonable to use PDB?

    • "I don't use a debugger"

    • When is it really not reasonable?

  • Modes of pdb usage

    • set_trace mode, e.g. pdb.set_trace()

    • postmortem mode, e.g. python -m pdb buggy.py or pdb.pm()

    • run mode, .e.g. pdb.run('some.expression()').

  • Getting help

  • Shortcut aliases (c vs. continue)

  • The workhorse commands (list, print, pretty-print, next, continue, step, return, until, where, up, down):

    • list: displaying code in your current execution context

    • p and pp: displaying objects

    • continue, step, return, next, return, until: execution control

    • where: showing the current location in the frame stack

    • up, down: navigating the frame stack

  • Managing breakpoints (break, tbreak, ignore, enable, disable, clear):

    • break, tbreak, ignore, enable, disable, and clear: Managing breakpoints
  • Lesser-used commands (args, !-prefixing, debug)

    • debug: recursive debugging

    • !-prefixing: modifying variables

    • args: printing args to the current function

    • commands: scripting pdb

  • ~/.pdbrc and PDB aliases

  • Debugging in the face of threads (ie. web apps).

  • "Purple bags"

    • Enhanced shells: ipdb, pudb, winpdb

    • In-editor debugger integration (Wing, Eclipse PyDev, PyCharm, etc)