2011-03-23 79 views
4

我得到了一個作爲windows服務運行的python程序,在我看來,它會捕獲所有異常。在我的開發環境中,當程序崩潰時,我無法重現任何情況,即沒有記錄異常。除了兩種情況:程序通過任務管理器終止或關閉計算機。確定進程的殺手

但是,在目標環境(安裝了所有必要的庫和python的Windows 2000)上,Windows服務突然停止加載。 4分鐘後重新啓動而不記錄任何異常或失敗原因。環境絕對沒有關閉。

有沒有人有建議如何確定什麼殺死了Python程序?

編輯:我不能在目標環境中使用調試器(因爲它是生產級別)。因此我需要一種記錄失敗原因的方法。因此,我正在尋找工具或方法來記錄運行時(或失敗時間)的附加信息,這些信息可用於事後分析。

+2

這聽起來像是堆棧溢出。你可以在生產環境中附加一個調試器嗎? – Gabe 2011-03-23 08:01:50

+0

不,不幸的是我不能在目標環境中使用調試器。 – Bertolt 2011-03-23 08:39:16

+0

您可以使用「python -dv yourscript.py」以調試模式運行解釋器。 或者可能是「python -m pdb yourscript.py」來運行你的腳本,它是python調試器模塊「pdb」。 – w00t 2011-03-23 08:50:20

回答

0

您需要提供更多信息,例如「您的程序是多線程的嗎?」代碼依賴於您正在使用的Python解釋器的版本,還是所使用的導入模塊在目標環境中不存在?

如果你有GDB for Windows,你可以做「gdb -p pid」,其中「pid」是你正在運行的python程序的pid。如果發生崩潰,您可以獲取後面的跟蹤。

0

您可能還想檢查從sysinternals.com以下工具(現已被微軟收購): http://technet.microsoft.com/en-us/sysinternals/bb795533

如ProcDump,進程監視器,甚至進程資源管理器(又少適應比以往)。

您也可以安裝輕量級調試器(如OllyDbg),或者如果您恰好在虛擬化環境中使用Moonsols的工具來監控訪客虛擬機的進程,