我对python和pdb比较陌生,但我有很多使用gdb的经验。
我的问题是,如果我在代码中设置了许多断点,我会想要更改一些东西,并重新运行调试会话,保留这些断点。但是,在pdb会话中输入"run“会导致会话终止,并显示以下输出
(Pdb) run
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/lib64/python2.6/pdb.py", line 1319, in <module>
pdb.main()
File "/usr/lib64/python2.6/pdb.py", line 1312, in main
pdb.interaction(None, t)
File "/usr/lib64/python2.6/pdb.py", line 198, in interaction
self.cmdloop()
File "/usr/lib64/python2.6/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "/usr/lib64/python2.6/pdb.py", line 267, in onecmd
return cmd.Cmd.onecmd(self, line)
File "/usr/lib64/python2.6/cmd.py", line 219, in onecmd
return func(arg)
File "/usr/lib64/python2.6/pdb.py", line 661, in do_run
raise Restart
pdb.Restart
]$我已经在两个独立的linux平台上进行了尝试,并获得了相同的结果,但在文档中找不到任何更正。
发布于 2012-10-20 00:04:23
所以,如果有人关心的话,问题是pdb中的"run“与gdb中的"run”并不完全相同。在gdb中,如果我输入run,程序将重新启动并继续到第一个断点。在pdb中,程序重新启动并转到文件的开头。然后,我必须先按“n”,再按“c”,才能到达第一个断点。如果在尝试让程序运行时,我在调试器崩溃的文件开头再次键入run,如下所示。
发布于 2018-06-10 19:09:55
这是我的文件test.py
import pdb
pdb.set_trace()
print('1 line')当我使用'python3 test.py‘命令时,我得到了同样的错误:
> /home/wangpq/program_note/test.py(3)<module>()
-> print('1 line')
(Pdb) run
Traceback (most recent call last):
File "program_note/test.py", line 3, in <module>
print('1 line')
File "program_note/test.py", line 3, in <module>
print('1 line')
File "/usr/lib/python3.5/bdb.py", line 48, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib/python3.5/bdb.py", line 66, in dispatch_line
self.user_line(frame)
File "/usr/lib/python3.5/pdb.py", line 259, in user_line
self.interaction(frame, None)
File "/usr/lib/python3.5/pdb.py", line 346, in interaction
self._cmdloop()
File "/usr/lib/python3.5/pdb.py", line 319, in _cmdloop
self.cmdloop()
File "/usr/lib/python3.5/cmd.py", line 138, in cmdloop
stop = self.onecmd(line)
File "/usr/lib/python3.5/pdb.py", line 412, in onecmd
return cmd.Cmd.onecmd(self, line)
File "/usr/lib/python3.5/cmd.py", line 217, in onecmd
return func(arg)
File "/usr/lib/python3.5/pdb.py", line 1022, in do_run
raise Restart
pdb.Restart然后我使用命令'python3 -m pdb test.py‘
wangpq@wangpq:~$ python3 -m pdb program_note/test.py
> /home/wangpq/program_note/test.py(1)<module>()
-> import pdb
(Pdb) restart
Restarting program_note/test.py with arguments:
program_note/test.py
> /home/wangpq/program_note/test.py(1)<module>()
-> import pdb
(Pdb) 这是的工作原理。到目前为止,我不确定为什么会发生这种情况。
发布于 2016-03-04 06:07:59
在遇到异常情况(例如,程序中的错误)时,pdb会非常有帮助地说:
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program在这里,输入"run“或" restart”将导致pdb进程随意终止为OP状态(但"cont“或"step”将按承诺重新启动)。
想必许多不耐烦的pythonistas宁愿“运行”或“重启”工作,不管我们是否已经进入“事后调试”,但我确信现有的重启语义是一个更干净的实现的副产品。
https://stackoverflow.com/questions/12783321
复制相似问题