Is it possible to use bpython as a full debugger?

时间秒杀一切 提交于 2019-12-05 13:19:45

问题


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 use ipdb.set_trace() you get a full ipython session with all of its conveniences. However, bpdb.set_trace() doesn't give me a bpython session, it gives me the standard pdb debugger.

Is there any way of setting things up so that I can debug within a bpython session?


回答1:


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!




回答2:


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.



来源:https://stackoverflow.com/questions/9892751/is-it-possible-to-use-bpython-as-a-full-debugger

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!