2012-10-08 100 views
6

我对python和pdb比较陌生,但我对gdb有很多经验。PDB.run - 重新启动pdb会话

我的问题是,如果我在某些时候在代码中设置了多个断点,我将想要更改某些内容并重新运行保留这些断点的调试会话。然而,在我的PDB会话的情况下进入“运行”我会与下面的输出

(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平台,并有同样的结果结束,但我不能找到文档中的任何更正。

回答

8

所以如果有人在意这个问题,在pdb中的“运行”与gdb中的“运行”不完全相同。在gdb中,如果我输入运行程序重新启动并继续到第一个中断点。在pdb中,程序重新启动并转到文件的开头。然后我必须按'n',然后按'c'才能到达第一个中断点。如果试图让程序运行,我会在调试器崩溃的文件开始处再次运行,如上所示。

+0

是的,有人在乎。谢谢! – Oddthinking

+2

这仍然是pdb中的一个错误 – erjoalgo

+0

刚刚重启后可以'c',对不对? –

1

一旦遇到异常情况(即,在你的程序中的错误),PDB,而帮忙,说:

Uncaught exception. Entering post mortem debugging 
Running 'cont' or 'step' will restart the program 

这里,键入“运行”或“重启”将导致PDB过程中毫不客气地终止为OP状态(但“继续”或“步骤”将按照承诺重启)。

大概很多急躁的pythonistas宁愿“运行”或“重新启动”工作,无论我们是否已经进入“死后调试”,但我确信现有的重新启动语义是清洁实现的副产品。

相关问题