2010-02-07 38 views
9

我打電話給python -m pdb myapp.py,當發生異常時,我通常會被拋回到pdb解釋器來調查問題。但是,在通過curses.wrapper()調用並進入curses模式之後,拋出此異常,導致pdb解釋器無效。我該如何解決這個問題?同時使用調試器和curses?

+0

我覺得可能是有用的信息來源http://wiki.python.org/moin/PythonDebuggers – 2010-02-07 15:00:42

+13

我笑在這個標題。是的調試和詛咒似乎一起在我腦海中。 – HLGEM 2010-02-09 21:56:51

回答

8

James`答案是一個很好的,我已經upvoted它,但我也會考慮嘗試拆分我的程序的邏輯和表示層。將curses部分放在庫頂部的薄層上,並編寫一個簡單的驅動程序,調用正確的例程來重新創建錯誤。然後你可以潛入並做必要的事情。

我能想到的另一種方法是創建一個名爲debug的函數,或者將您引回常規屏幕並調用pdb的函數。然後將其粘貼在引發異常並運行程序的代碼之前。像

def debug(stdscr): 
    curses.nocbreak() 
    stdscr.keypad(0) 
    curses.echo() 
    curses.endwin() 
    import pdb; pdb.set_trace() 

東西顯然,這是類似於與curses.wrapper函數來完成。它在http://www.amk.ca/python/howto/curses/簡要提及。

+0

一個明智的建議,保持curses邏輯分離,並感謝'curses.wrapper'指針。 – 2010-06-04 10:26:30

+0

不客氣。 – 2010-06-04 12:30:39

7

不熟悉Python,這可能不是你想要的。但顯然,winpdb可以附加到腳本 - 就像gdb可以運行的進程(IIUC)。

http://winpdb.org/docs/launch-time/

不要被名字誤導,它是獨立的平臺。

+1

好的建議。你擊敗了我。這是解決這個問題的正確方法。對於GUI和守護進程也很有用。 – 2010-06-01 11:36:15

+0

我忘記了一切! – 2010-06-01 11:56:58

+0

我不認爲可以附加使用核心庫的pdb? – 2010-06-04 10:26:59

0

使用pyclewn

可以使用pyclewn用vim。 或使用PDB克隆,pyclewn 其良好的,它像廣發行的核心,可以遠程調試

相關問題