I would like to use the bpython interpreter for debugging. My question is similar to \"Is it possible to go into ipython from code?\", which asks about ipython.
If you
If you are looking for a cooler looking debugger that does completion and syntax highlighting you might want to take a look at pdb++. http://pypi.python.org/pypi/pdbpp/
It's a drop in replacement for pdb. So you can continue to use
import pdb; pdb.set_trace()
and it'll drop you into the pdb++ prompt.
Yes, using this wrapper, which you can also access by adding the statement import bpdb
to your code. Add bpdb.set_trace()
wherever you want to break, and from the pdb
interpreter enter "B" to jump into a bpython
session with everything from the stack frame:
# The MIT License
#
# Copyright (c) 2008 Bob Farrell
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
import pdb
import bpython
class BPdb(pdb.Pdb):
""" PDB with BPython support. """
def __init__(self):
pdb.Pdb.__init__(self)
self.rcLines = []
self.prompt = '(BPdb) '
self.intro = 'Use "B" to enter bpython, Ctrl-d to exit it.'
def postloop(self):
# We only want to show the intro message once.
self.intro = None
pdb.Pdb.postloop(self)
### cmd.Cmd commands
def do_Bpython(self, arg):
bpython.embed(self.curframe.f_locals, ['-i'])
def help_Bpython(self):
print "B(python)"
print
print ("Invoke the bpython interpreter for this stack frame. To exit "
"bpython and return to a standard pdb press Ctrl-d")
### shortcuts
do_B = do_Bpython
help_B = help_Bpython
Your question seems perfectly valid to me!