【问题标题】:Remember breakpoints when debugging using ipython使用 ipython 调试时记住断点
【发布时间】:2015-02-22 07:13:44
【问题描述】:

我使用 ipython 和 run -d foo.py 来调试我的程序。但是每次我重新调试程序时,我都必须重置所有的断点。当您有多个断点或多个 py 文件时,这很烦人。

是否可以让 ipython 或 pdb 记住断点并在下次调试会话中重用它们。

【问题讨论】:

    标签: python debugging ipython


    【解决方案1】:

    您可以为 pdb 编写一个初始化文件,其中列出了您要添加到程序中的所有断点。它必须被称为.pdbrc 并放置在工作目录或您的主目录中。断点可以由行号或函数名指定。

    例如。

    a.py

    import b
    
    def doX():
        print("in x") # line 4
        b.doY()
    
    if __name__ == "__main__":
        doX()
    

    b.py

    def doY():
        print("in y") # line 2
    

    .pdbrc

    # the following are all equivalent -- placing a breakpoint on entry into doX
    break 4
    break a.py:4
    break doX
    break a.doX
    
    # placing a breakpoint on entry into doY
    break b.py:2
    break b.doY
    

    输出

    In [8]: %run -d a.py
    Breakpoint 1 at /home/user/Desktop/python-stuff/a.py:1
    NOTE: Enter 'c' at the ipdb>  prompt to continue execution.
    Breakpoint 2 at /home/user/Desktop/python-stuff/a.py:3
    Breakpoint 3 at /home/user/Desktop/python-stuff/b.py:1
    > /home/user/Desktop/python-stuff/a.py(1)<module>()
    1---> 1 import b
          2 
    2     3 def doX():
    
    ipdb> c
    > /home/user/Desktop/python-stuff/a.py(4)doX()
    2     3 def doX():
    ----> 4         print("in x")
          5         b.doY()
    
    ipdb> c
    in x
    > /home/user/Desktop/python-stuff/b.py(2)doY()
    3     1 def doY():
    ----> 2         print("in y")
          3 
    
    ipdb> c
    in y
    

    【讨论】:

    • 谢谢@Dunes!只是想强调一下,如果b.py 不在当前目录中,而是在另一个文件夹./dir1/dir2/b.py 中。在.pdbrc中,我们需要设置bread dir1/dir2/b.doY
    • 刚刚检查过,pdb 还包括restart 命令,它使用相同的断点和选项重新启动程序。这可能是更简单的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2013-01-16
    • 2016-07-09
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多