Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ipython进行调试时记住断点_Python_Debugging_Ipython - Fatal编程技术网

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

使用ipython进行调试时记住断点,python,debugging,ipython,Python,Debugging,Ipython,我使用ipython和run-dfoo.py调试我的程序。但是每次我重新调试程序时,我必须重置所有断点。当您有多个断点或多个py文件时,这很烦人 是否可以让ipython或pdb记住断点并在下一个调试会话中重用它们。您可以为pdb编写初始化文件,其中列出要添加到程序中的所有断点。它必须被称为.pdbrc,并放置在工作目录或主目录中。断点可以通过行号或函数名指定 例如 a.py import b def doX(): print("in x") # line 4 b.doY()

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


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

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

例如

a.py

import b

def doX():
    print("in x") # line 4
    b.doY()

if __name__ == "__main__":
    doX()
def doY():
    print("in y") # line 2
b.py

import b

def doX():
    print("in x") # line 4
    b.doY()

if __name__ == "__main__":
    doX()
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
[8]中的
:%run-d a.py
断点1位于/home/user/Desktop/python stuff/a.py:1
注意:在ipdb>提示符处输入“c”以继续执行。
断点2位于/home/user/Desktop/python stuff/a.py:3
断点3位于/home/user/Desktop/python stuff/b.py:1
>/home/user/Desktop/python stuff/a.py(1)()
1--->1导入b
2.
2 3 def doX():
ipdb>c
>/home/user/Desktop/python stuff/a.py(4)doX()
2 3 def doX():
---->4打印(“在x中”)
5 b.多伊()
ipdb>c
在x中
>/home/user/Desktop/python stuff/b.py(2)doY()
3 1 def doY():
---->2印刷体(“y型”)
3.
ipdb>c
在y

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

例如

a.py

import b

def doX():
    print("in x") # line 4
    b.doY()

if __name__ == "__main__":
    doX()
def doY():
    print("in y") # line 2
b.py

import b

def doX():
    print("in x") # line 4
    b.doY()

if __name__ == "__main__":
    doX()
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
[8]中的
:%run-d a.py
断点1位于/home/user/Desktop/python stuff/a.py:1
注意:在ipdb>提示符处输入“c”以继续执行。
断点2位于/home/user/Desktop/python stuff/a.py:3
断点3位于/home/user/Desktop/python stuff/b.py:1
>/home/user/Desktop/python stuff/a.py(1)()
1--->1导入b
2.
2 3 def doX():
ipdb>c
>/home/user/Desktop/python stuff/a.py(4)doX()
2 3 def doX():
---->4打印(“在x中”)
5 b.多伊()
ipdb>c
在x中
>/home/user/Desktop/python stuff/b.py(2)doY()
3 1 def doY():
---->2印刷体(“y型”)
3.
ipdb>c
在y

谢谢@Dunes!只是想强调一下,如果
b.py
不在当前目录中,而是在另一个文件夹
/dir1/dir2/b.py
中。在
.pdbrc
中,我们需要设置刚才选中的
bread dir1/dir2/b.doY
。pdb还包括
restart
命令,该命令使用相同的断点和选项重新启动程序。这可能是更简单的答案。谢谢@Dunes!只是想强调一下,如果
b.py
不在当前目录中,而是在另一个文件夹
/dir1/dir2/b.py
中。在
.pdbrc
中,我们需要设置刚才选中的
bread dir1/dir2/b.doY
。pdb还包括
restart
命令,该命令使用相同的断点和选项重新启动程序。这可能是更简单的答案。