使用ipython进行调试时请记住断点

时间:2015-02-22 07:13:44

标签: python debugging ipython

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

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

1 个答案:

答案 0 :(得分:4)

您可以为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