1

我正在为一个更大的应用程序开发一个插件,我在下面的代码中遇到了一个奇怪的问题。当在 Release 模式下运行或在没有断点的 Debug 下运行时,一切都很好。但是当我在下面的代码片段附近放置一个断点时,我得到了一个错误。看起来调试器预先评估了 if 块中导致错误的代码,尽管实际上从未达到此代码。

请注意,索引器会在内部检查不正确的索引并触发事件到主应用程序。主应用程序通过显示一个对话框并自行关闭来处理此错误事件。我无法更改主应用程序,也无法修改索引器(尽管我认为抛出异常而不是触发事件可能会起作用)。

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";
}

当我在工具->选项->调试中禁用“启用属性评估和其他隐式函数调用”时,它工作得很好。你有任何想法如何解决这个问题吗?我不想要这个错误消息,但我也不想失去调试器评估的便利。

[编辑] 我重写了描述。

[更新]我暂时更改了索引器内的代码,以抛出一个异常,将事件委托给上层错误处理层,它有所帮助。VS 调试器吞下了异常,因此所有副作用都停止了(错误处理层没有显示消息框)

所以问题是:

除了第三个选项:

1)从弹出的事件到上层永久变为异常

2)取消选中“启用属性评估和其他隐式函数调用”

4

1 回答 1

1

您是否控制 _manager 是其实例的类的实现?你试过把 [DebuggerBrowsable(Never)] 属性放在上面吗?它应该对调试器隐藏该属性。

于 2011-04-23T04:30:29.780 回答