【问题标题】:Convenience function defined for debugging with ipdb in Python为在 Python 中使用 ipdb 进行调试而定义的便利函数
【发布时间】:2016-01-21 09:42:21
【问题描述】:

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

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

【问题讨论】:

    标签: python debugging pdb ipdb


    【解决方案1】:

    在通过调用 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 版本中没有。

    【讨论】:

    • 好!如果“import sys”包含在定义 bp() 中,它也可以工作
    • 我编辑了答案以反映对import sys 的观察。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多