2011-02-02 38 views
1

我正在開發一個更大的應用程序的插件,我遇到了一個奇怪的問題,下面的代碼。在Release模式下運行或在沒有斷點的情況下運行時,一切正常。但是,當我在下面的代碼片段附近放置斷點時,出現錯誤。它看起來像調試程序預先評估if塊中的代碼導致錯誤,儘管這段代碼從未真正達到過。Visual Studio 2008調試器 - 功能評估奇怪

請注意,索引器內部會檢查不正確的索引,並觸發事件到主應用程序。主應用程序通過顯示一個對話框並關閉它自己來處理這個錯誤事件。我無法更改主應用程序,也無法修改索引器(儘管我認爲引發異常而不是發起事件可能會起作用)。

int a = GetA(); // returns 0 
if (a == 1) 
{ 
    _manager[a - 1][ColumnName.Name] = "X"; //Manager has an indexer returning a DataRow. 
} 

if (a == 2) 
{ 
    _manager[a - 1][ColumnName.Name] = "Y"; 
} 

當我在工具 - >選項 - >調試中禁用了「啓用屬性評估和其他隱式函數調用」,它完美地工作。你有什麼想法如何解決這個問題?我不想要這個錯誤消息,但我也不想失去調試器評估的便利。

[編輯]我重新寫了描述。

[UPDATE]我暫時更改了索引器中的代碼,引發了一個異常,將事件委派給上層的錯誤處理層,並且有所幫助。 VS調試吞下例外,這樣所有的副作用停止(沒有消息框是由錯誤處理層顯示)

所以,問題是:

有旁第三個選擇:

1)永久改變從事件被彈起到上層取消勾選例外

2)「啓用財產評估和其他隱函數調用」

+1

你能解釋一下「錯誤」是什麼意思嗎?它彈出一個對話框,退出調試器等... – JaredPar 2011-02-02 16:49:27

+0

「錯誤是一個對話框」不是我見過的錯誤信息。更好地記錄你的問題。 – 2011-02-02 18:43:54

回答

1

你控制類的實現, _manager是一個實例嗎?您是否嘗試將[DebuggerBrowsable(Never)]屬性放在上面?它應該從調試器隱藏該屬性。