我正在为更大的应用开发插件,我遇到了以下代码的奇怪问题。在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)取消选中“启用属性评估和其他隐式函数调用”
答案 0 :(得分:1)
您是否控制_manager是其实例的类的实现?你试过把[DebuggerBrowsable(Never)]属性放在上面吗?它应该从调试器中隐藏该属性。