2010-07-07 76 views
3

在運行時,當myApp.exe崩潰時,我收到「未處理的Win32異常」,但我怎麼知道發生了哪種異常?哪裏出了問題?未處理的Win32異常

+0

你在用什麼語言?這是.NET嗎? C++? – Oded 2010-07-07 07:29:25

回答

0

如果它是一個.Net應用程序,您可以嘗試將UnhandledException事件放入處理程序中。你可以找到更多關於它的信息和一些示例代碼here

總的來說,這是一個很好的跡象表明你的異常處理被破壞了,所以可能值得通過你的代碼並找到可能拋出的地方,但是在你不處理異常的地方。

0

使用調試器。您可以運行該程序並查看拋出您的應用程序的異常。它可能能夠查明投擲的位置。我沒有使用過VS調試器,但在gdb中,可以使用catch throw在拋出異常時強制斷點,應該有類似的東西。

2

對於Native C++應用程序,請參閱我之前的回答:Detect/Redirect core dumps (when a software crashes) on Windows用於捕獲未處理的異常(還提供了用於創建崩潰轉儲的代碼,您可以稍後使用它來分析崩潰,如果崩潰發生在開發系統上然後在Visual Studio中(假設你正在使用它,如果不是其他IDE會有類似的話),在Debug/Exceptions中勾選'Win32 Exceptions'的'Thrown'框

1

通常,Windows會給你也有幾個十六進制數字,很可能是異常代碼是0xC0000005這是Access Violation的代碼,當發生這種情況時,你還會得到三個額外的信息:違規地址,違規地址和違規類型離子(讀,寫或執行)。 Windows不會縮小它的範圍,而且往往也不能。例如,如果你在程序中走過一個數組的末尾,Windows可能不會意識到你甚至遍歷了一個數組。它只是看到「閱讀:好,閱讀:好,閱讀:越界=>頁面錯誤=>訪問違規」。您必須從違規地址(數組迭代代碼)和違規地址(數組後面的超出邊界地址)中找出結果。