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 版本中未进行测试。
在我的 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 版本中未进行测试。