2015-06-20 59 views
1

有一個C#程序很少掛起。該程序在遠程機器上執行並且不能啓動調試器。運行外部分析器更加實際,但也存在巨大的困難。如何確定程序掛起點而不使用分析器或調試器?程序掛點標識

選項「FS上的詳細記錄」很不適合。該程序包含大約2萬行代碼,並且不經常掛起。

我試過Process Explorer,但它的工作原理很奇怪(或者我還沒有理解它)。如果你已經設法「捕捉」線程進入無限循環的時刻,那麼可以在那一刻看到棧。但是這個線程很快就消失了(無論是PE還是真的被環境所殺)。

可以接受創建另一個應用程序application-monitor的選項。如果您可以說如何創建主進程的轉儲或獲取有關主進程的線程的信息,那就太好了。如果你有一些現成的工具,它會更好。

+0

任何條目採取應用程序事件日誌查看器

Windows Event Log 圖片? –

+1

它可能是其他軟件(如數據庫轉儲或預定服務)造成這種情況嗎? – NoChance

+0

@ Pierre-LucPineault,非常感謝。我檢查了標準的Windows應用程序事件日誌,並在那裏找到了關於這些錯誤的條目。我知道確切的掛起時間,所以找出我的應用程序的錯誤並不是問題。歡迎您撰寫回答以獲取carma) –

回答

0

當應用程序崩潰時,通常應該登錄到Window的Application Event Log。它並不是非常詳細,但無論如何都應該提供非常可靠的線索,而無需任何外部工具。

要達到此目的,您可以搜索開始菜單中的「事件日誌」或在控制面板中找到它。它位於Administrative Tools部分。

進入事件查看器後,打開左側的Windows Logs項,然後選擇Application。您應該能夠使用Source列在列表中找到您的應用程序。

在底部你會發現錯誤的細節,時間戳和一些可以幫助你調試應用程序的信息。從Cyberlink.com

0

'hang'是否意味着程序停止工作,直到它重新啓動或程序暫停了一段不尋常的時間。如果是後者,它可能會出現在一個重要的GC集合中。如果它是前者,並且您懷疑某種無限循環,那麼在任務管理器(或進程管理器)中,您應該看到它幾乎耗盡了其中一個處理器內核。例如,如果您有四個內核,並且程序以緊密的方式掛起,則在性能面板中會看到大約25%的cpu使用率(假設使用輕度加載的機器)。

MS支持託管調試,請參見Debugging Managed Code Using the Windows Debugger您可以使用sos擴展來中斷代碼執行並查看程序的狀態。如果採取這種方法,您可能想要使用pdb程序。