我有一個Windows Forms應用程序和一個Editor
類(繼承自Form
)。VS2010沒有打破靜態構造函數異常的調試
public partial class Editor : Form
{
public Editor()
{
InitializeComponent();
Load += Editor_Load;
}
private void Editor_Load(object sender, EventArgs e)
{
cmbConnections.DataSource = ConnectionManager.Connections;
cmbConnections.Visible = false;
}
}
比設計器生成的代碼其他,這是爲形式的唯一代碼(即只包含單個組合框(cmbConnections
)。
的ConnectionManager
類是與一個靜態構造一個靜態類。它的構造函數會進行一些初始化,然後測試一些關鍵條件,如果條件滿足,構造函數會拋出一個異常,但是這個異常在Visual Studio 2010的調試模式下不會中斷。爲了測試這個,我只把throw new Exception()
在ConnectionManager
的靜態構造函數中。使用ConnectionManager
併爲此初始化(第一次)在Editor_Load
事件處理程序。調用靜態構造函數並引發異常(僅在輸出窗口中可見)。正如預期的那樣,Editor_Load
事件處理程序(cmbConnections.Visible = false;
)的其餘部分未執行。
但我不明白的是爲什麼我的VS2010吞下異常?它沒有打破調試。它不包含在任何try/catch塊中。它繼續在主窗口中執行程序。它看起來好像在另一個線程上執行Editor_Load
。
我可以看到在輸出窗口中的消息:
「System.InvalidOperationException」類型的第一次機會異常出現在Editor.exe
型「System.TypeInitializationException」的第一次機會異常發生在Editor.exe中
但是執行在調試模式下根本沒有中斷。
下面是一些我的選擇,我認爲可能會影響此行爲:
項目屬性 - >建設 - >常規 - >優化代碼沒有被選中。
工具 - >選項 - >調試 - >常規 - >啓用只是我的代碼被檢查。
在例外設置中,「用戶未處理」的複選框爲「已檢查」。
我錯過了什麼嗎?這種行爲是否正常?我認爲VS2010會拋出任何未處理的異常。這裏這個沒有處理,仍然沒有破壞。
你忘了提及你有一個64位操作系統。蹩腳的問題,簡單修復:Project + Properties,Build選項卡,將Platform目標從x86更改爲AnyCPU。 – 2012-02-10 00:32:21
我還沒有能夠檢查我的x64系統(我昨天正在開發)。不過,我已經在x86系統上嘗試過相同的解決方案,並且確實打破了VS2010。所以我猜你的評論可能是正確的。我建議你發佈這個答案。導致所有其他答案都包含與問題無關的信息,但僅僅解釋了VS2010異常處理的工作方式。我的問題是關於爲什麼VS2010的行爲超出了它自己的標準 - 我想你已經回答了 - 這是x64系統上的某種錯誤。我會盡快在x64上進行測試,以確認。 – 2012-02-10 09:48:28
[VS2010在64位WinForms應用程序中未顯示未處理的異常消息]的可能重複(http://stackoverflow.com/questions/4933958/vs2010-does-not-show-unhandled-exception-message-in-a -64位winforms應用程序) – 2012-02-10 12:36:00