我正在开发一个更大的应用程序的插件,我遇到了一个奇怪的问题,下面的代码。在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)“启用财产评估和其他隐函数调用”
你能解释一下“错误”是什么意思吗?它弹出一个对话框,退出调试器等... – JaredPar 2011-02-02 16:49:27
“错误是一个对话框”不是我见过的错误信息。更好地记录你的问题。 – 2011-02-02 18:43:54