3

在我的 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

有没有办法我可以采用类似的方法,但直接进入代码的相关部分?

4

1 回答 1

3

在调用 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)

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

于 2016-01-21T19:28:18.463 回答