2012-10-08 71 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寧願「運行」或「重新啓動」工作,無論我們是否已經進入「死後調試」,但我確信現有的重新啓動語義是清潔實現的副產品。

相關問題