Python 中为使用 ipdb 进行调试而定义的便捷函数

Convenience function defined for debugging with ipdb in Python

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

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