There are several ways to debug Python.
This tutorial focuses on PDB, the debugger provided with Python.
Documentation for PDB is here: https://docs.python.org/3.5/library/pdb.html
You can run your Python script directly using the debugger:
$ python -m pdb script.py
Or interactively, for postmorten debugging:
>>> import pdb
>>> import script
>>> # here you call the code that crashes
>>> pdb.pm
Alternately you can insert the debugging into your script:
# start debugging your script here
import pdb
pdb.set_trace()
Once you are in the debugger it provides the following commands:
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
You can access this list by typing: help
You can get more help on each command by typing: help <topic>
for example: help list
brings up:
l(ist) [first [,last] | .]
List source code for the current file. Without arguments,
list 11 lines around the current line or continue the previous
listing. With . as argument, list 11 lines around the current
line. With one argument, list 11 lines starting at that line.
With two arguments, list the given range; if the second
argument is less than the first, it is a count.
The current line in the current frame is indicated by "->".
If an exception is being debugged, the line where the
exception was originally raised or propagated is indicated by
">>", if it differs from the current line.
In everyday use you'll mainly need to know:
c
or continue
- Continues running the codeq
or quit
- Quitsl
or list
- Displays several lines around the current line or continue the previous listing.s
or step
- Execute the current line, stop at the first possible occasion.n
or next
- Continue execution until the next line in the current function is reached or it returns.b
or break
- Set a breakpoint (depending on the argument provided).r
or return
- Continue execution until the current function returns.u
or up
- Move up the stack one frame.d
or down
- Move down the stack one frame.! <code>
- Evaluates the <code>
as Python on the current framereturn
or <enter>
- Repeates the last commandand of course you can type and run and valid Python code so long as it's not a pdb command.
In [ ]:
In [ ]: