2011-02-02 29 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)]属性放在上面?它应该从调试器隐藏该属性。