使用 ipython 调试时记住断点
Remember breakpoints when debugging using ipython
我使用 ipython 和 run -d foo.py
来调试我的程序。但是每次重新调试程序,我都得重新设置所有的断点。当您有多个断点或多个 py
文件时,这很烦人。
是否可以让 ipython 或 pdb 记住断点并在下一次调试会话中重新使用它们。
您可以为 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
我使用 ipython 和 run -d foo.py
来调试我的程序。但是每次重新调试程序,我都得重新设置所有的断点。当您有多个断点或多个 py
文件时,这很烦人。
是否可以让 ipython 或 pdb 记住断点并在下一次调试会话中重新使用它们。
您可以为 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