在Python脚本的顶部,我定义了以下方便用ipdb调试的函数:

def bp():
    import ipdb
    ipdb.set_trace()

所以当我想在某个点上调试时,我可以写:
bp()

而不是写
import ipdb; ipdb.set_trace()

(除非需要,否则我不希望导入ipdb)。
这种方法的问题是,当输入pdb时,我会在函数bp()中着陆,因此我必须按“u”转到代码的相关部分:
> /path/to/script.py(15)bp()
      14     import ipdb
 ---> 15     ipdb.set_trace()
      16

ipdb> u

有没有一种方法可以让我有一个类似的方法,但直接进入代码的相关部分?

最佳答案

在调用ipdb.set_trace()定义的断点中更改活动帧的方法如下:

def bp():
    import ipdb
    import sys
    ipdb.set_trace(sys._getframe().f_back)

对于pdb来说,通过简单的重命名,同样的方法似乎不起作用,但是以下方法似乎起作用:
def bp():
    from pdb import Pdb
    import sys
    Pdb().set_trace(sys._getframe().f_back)

我在Python3.5中对此进行了测试,但在其他python版本中没有。

关于python - 在Python中使用ipdb调试定义的便捷功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34920112/

10-11 15:00