2013-06-13 111 views
0

我已經覆蓋線程程序(控制檯應用程序)用C#編寫如何知道在特定情況下

運行良好長達6-10小時後失敗並停止,控制檯做調試/ profile文件上吊C#應用程序不關閉並顯示上次成功的日誌

錯誤日誌(所有可能的)它寫入文件。

如果發生甚至IO異常它在Windows事件並將其寫入

有記憶衛隊和線程逆天太那個限制程序給定的限制。

當它停止(6-10小時後)沒有任何反應沒有錯誤日誌,心跳,數據庫調用,內存使用情況,我可以看到線程產生了70%左右的最大限制。

我知道這可能是內存泄漏,因爲線程可能不會因數據庫調用延遲而變得免費。

我只是想在這個停止的應用程序上工作,以知道確切的問題,如內存泄漏或哪個調用阻塞。

是否有任何工具可用於此掛起/停止的應用程序?什麼應該是正確的方式來進行。

我使用ANTS內存pro-filer,性能pro-filers,但所有這些工具在運行應用程序工作。

我最能得到的是內存轉儲。

建議歡迎。

編輯: 最初我不想重新運行它等待幾個小時來調試,如果沒有辦法,這將是最後的選擇。

我試圖附加調試器,並把斷點,它說:「斷點不會打到現在......」

+0

可以運行在Visual Studio中,並在調試模式下的應用程序? – Karlth

+0

也許,您可以處理內存轉儲以找出在應用程序運行時執行的線程。在多個線程應用程序中,存在影響整個系統的小代碼塊。 –

+0

它是一個WPF應用程序或一個贏的窗體應用程序?如果它的WPF,請注意與線程一起使用的事件,並嘗試使用弱事件而不是創建強引用的正常事件,並且在大多數情況下不會自動釋放。如果它是一個winform應用程序,最好的辦法是仔細查看創建線程的代碼,並可能使用後臺工作線程來提高使用效率。在我看來,在你的應用程序掛起之前你必須找到錯誤,因爲在應用程序停止響應之後,這些工具也無法報告太多。 – learner

回答

0

嘗試Debug Diagnostics Tool v1.2它做你需要什麼,並有不同的問題,一個容易理解的嚮導。

如果你不想使用這個工具,我會附加一個調試器掛過程中,你應該能夠看到哪些線程仍在運行至少在哪個模塊

0

首先,你應該有查看事件查看器。 然後,如果您的應用程序崩潰沒有日誌,它可能是由於未處理的異常。 將下面的代碼在main方法:

Application.ThreadException += (sender, arg) => { log.Error("Unhandled exception : "+e.Exception);}; 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 

好運

相關問題