After years of research programming in Matlab, I miss the way I could pause a program mid-execution and inspect the variables, do plotting, save/modify data, etc. via the intera
The code module contains classes for bringing up a REPL.
The excellent solution I found was to use the 'code' module. I can now call 'DebugKeyboard()' from anywhere in my code and the interpreter prompt will pop-up, allowing me to examine variables and run code. CTRL-D will continue the program.
import code
import sys
def DebugKeyboard(banner="Debugger started (CTRL-D to quit)"):
# use exception trick to pick up the current frame
try:
raise None
except:
frame = sys.exc_info()[2].tb_frame.f_back
# evaluate commands in current namespace
namespace = frame.f_globals.copy()
namespace.update(frame.f_locals)
print "START DEBUG"
code.interact(banner=banner, local=namespace)
print "END DEBUG"
pdb is what you're looking for - just put a call to pdb.set_trace()
wherever you want to drop into an debugger.
Use the pdb
library.
I have this line bound to <F8>
in Vim:
import pdb; pdb.set_trace()
That will drop you into a pdb
console.
The pdb
console isn't quite the same as the standard Python console… But it will do most of the same stuff. Also, in my ~/.pdbrc
, I've got:
alias i from IPython.Shell import IPShellEmbed as IPSh; IPSh(argv='')()
So that I can get into a "real" iPython shell from pdb
with the i
command:
(pdb) i
...
In [1]:
Check out the Python debugger. In short, you can insert
import pdb; pdb.set_trace()
at any point in your program that you want to debug. (Note that you should remove these in release versions!)
Here is a better, simpler solution, works in Python 3.8 https://stackoverflow.com/a/1396386/4566456
Even more powerful if IPython is installed https://stackoverflow.com/a/8152484/4566456