2012-07-22 51 views
2

在Visual Studio中,如果我創建一個新的Windows窗體,並把下面進入Form_Load事件:如果我在Windows窗體的Form_Load事件上拋出異常,怎麼會發生什麼事?

throw new Exception(); 

什麼也沒有發生。我可以在這裏放置一個斷點,看看這行代碼已經到達,但沒有任何異常似乎被拋出。如果我將相同的語句放入按鈕的單擊事件中並單擊該按鈕,程序就會像我期望的那樣崩潰。

這是怎麼回事?

謝謝

+1

複製的[此](http://stackoverflow.com/questions/1583351/silent-failures-in-c-seemingly-unhandled-exceptions-that-does-not-crash-the-pr) :看起來像它的一個已知的bug。另請注意,它只會在調試模式下發生。 – SimpleVar 2012-07-22 12:38:17

+0

@YoryeNathan就這樣!感謝您的鏈接! – JMK 2012-07-22 12:39:53

+0

還有一個解決方法找到[這裏](https://connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines):打電話給System.Diagnostics。 OnLoad開始時的Debugger.Break()然後在不調試的情況下運行應用程序(Ctrl + F5)。這會在窗口句柄創建期間導致NativeWindow.windowProc == NativeWindow.Callback(而不是NativeWindow.DebuggableCallback),因此將顯示OnLoad期間引發的異常。一旦調用Break(),Visual Studio就可以附加到進程並且可以像平常一樣進行調試。 – SimpleVar 2012-07-22 12:42:13

回答

1

如果你在調試器外面運行它,它會被拋出。您需要配置調試器以解除未處理的異常。

Debug->Exceptions... 
Common Language Runtime Exceptions 
    System 
     System.Exception Click the "Thrown" checkbox. 
+0

好的,但'Thrown'和'User-unhandled'有什麼區別?這樣做會產生什麼影響? – JMK 2012-07-22 12:52:35

+0

拋出意味着拋出異常時立即中斷。用戶未處理意味着只有在你的代碼沒有處理異常時纔會中斷。它在聯機幫助中。 – 2012-07-22 13:21:46

+0

有趣的東西,謝謝! – JMK 2012-07-22 14:07:19

相關問題