2010-09-25 30 views
7

我的一個程序定期崩潰,但我不知道爲什麼。我在調試模式下運行它,但沒有彈出。該計劃突然退出。我有其他的錯誤會引發異常......但不是這個。有沒有捕捉它或什麼的神奇方式?如何在程序崩潰時除去異常?

回答

8

大概你從Visual Studio中運行它,出於某種原因,它不會停止在調試器中捕獲一個未捕獲的異常,在這種情況下,你可以嘗試從Visual Studio之外捕獲崩潰。在System.AccessViolationException from unmanaged code?查看我的回答,特別是how to capture a crash dump

如果它只是週期性崩潰,但在合理的短時間內,請從Sysinternals procdump開始。開始從外部Visual Studio的可執行文件,然後運行:

procdump -e <YourExecutableNameOrPid> 

,並等待它的收穫崩潰轉儲 - 假設它退出由於未處理的異常 - 那麼崩潰轉儲裝載到VS 2010或WinDbg的。

+0

如果您在.NET 4應用程序中出現AccessViolationException,並且意外地碰到了catch塊,該怎麼辦?是的,這現在真的發生在我身上。無法相信它我自己。打算問一個單獨的StackOverflow問題,但我先閱讀了這個答案。由於應用程序不會崩潰,因此不會出現故障轉儲,對嗎? – 2016-09-07 20:17:47

+1

@JohnZabroski我會後備調試WinDbg和SOS [EX]。看到我的與上面有關的其他答案。 – 2016-09-08 07:49:31

+0

謝謝,我在這裏詳細描述了我的問題:http://stackoverflow.com/questions/39378849/what-to-do-when-accessviolationexception-in-net-4-app-defies-msdn-documented-be – 2016-09-08 11:37:35

4

程序只是突然退出

肯定檢查你的代碼,或者你使用庫之一,不調用exit()(是的,聽起來太簡單了,但我們一旦失去小時跟蹤隨機程序關閉退出()調用..)。如果是這樣,請在那裏放置一個斷點或改爲throw(),然後再次運行。如果沒有,肖恩的答案似乎是合法的。

+0

我們有一次這個確切的問題,它花了我們多年的時間來弄清楚。這是值得檢查的。 – 2010-09-25 08:04:49

+0

你也應該在main()/ winmain()的最後一行設置一個斷點或者一些日誌語句。程序可能以一種意想不到的方式終止「正常」。 – 2010-09-25 13:36:49

+0

@紅色:這是一個WPF GUI應用程序...所有的代碼都在事件中,我不認爲它應該達到最後。 @stijn:很確定我沒有寫任何退出電話,但我會仔細檢查。 – mpen 2010-09-25 19:34:21

相關問題