我寫的一個相當大的Python程序運行,但有時運行幾分鐘或幾小時後,在一個不容易重現的時刻,掛起並不輸出任何內容到屏幕上。調試:如何檢查我的Python程序掛在哪裏?
我不知道它當時在做什麼,它在代碼的哪一部分。
我該如何在調試器中運行或查看程序在掛起的那一刻執行哪些代碼行?
它太大而無法將「印刷」聲明放在整個地方。
我所做的:
python -m trace --trace /usr/local/bin/my_program.py
但是這給了我這麼多的輸出,我實在看不出什麼,只是數百萬在屏幕上滾動的行。
如果我可以用「kill -SIGUSR1」或其他東西發送一些信號給程序,那麼程序就會進入一個調試程序並向我顯示它停止的行並且可能允許我執行然後通過程序。
我已經試過:
pdb usr/local/bin/my_program.py
然後:
(Pdb) cont
,但我該怎麼辦,看看我是當它掛起? 它不會拋出異常,只是看起來像是在等待某件事情,可能是在無限循環中。
一個更多的細節:當程序掛起時,我按^ C然後(不知道是否有必要)程序正常繼續(沒有拋出任何異常,沒有給我任何提示在屏幕上爲什麼它停止)。
使用'logging'模塊讓程序知道正在做什麼並提供一些狀態信息。 – Apalala 2011-02-28 18:25:14
嘗試將'import pdb; pdb.set_trace()'在你懷疑它掛起的地方。 – John 2011-02-28 18:54:48
嗯,問這個問題的重點是我不知道它可能掛在哪裏,程序掛起大約需要10分鐘,所以我不能做太多的實驗,因爲它需要很長的時間。 – miernik 2011-02-28 19:07:34