如何修复Visual Studio调试器提供的“可检测到可重入”警告?

时间:2010-04-06 15:16:46

标签: c# .net reentrancy

在调试模式下运行单元测试时,Visual Studio调试器会在某个时刻中断以显示reentrancy MDA。链接的文章解释说,当低级操作系统扩展点(例如向量异常处理程序)回调到托管应用程序代码时,会发生这种情况。

显然这会导致堆损坏或其他严重问题,所以我肯定想修复它。

我正在查看显示此警告的stacktrace,但是我无法确定这里涉及哪个“低级操作系统扩展点”。除了mstest引起的一次转换和调用System.Windows.Forms.Cursors.VSplit getter之外,我没有看到任何非托管/托管转换。此外,简单地从单元测试中调用getter似乎不足以触发警告。

我在这里做错了什么,我该如何解决?

1 个答案:

答案 0 :(得分:2)

正如Hans Passan建议的那样(虽然不幸的是他现在已经删除了他的答案),问题是在我的单元测试中我调用的代码只是在GUI线程的上下文中调用带有消息循环。单元测试中没有这样的消息循环。

在这种情况下,问题是System.Windows.Forms.Cursors.VSplit getter。我认为有两种方法可以避免这种情况:

  • 严格遵循MVVM模式,并在视图中将有问题的代码分开,只测试视图模型。
  • 或隐藏在单元测试中模拟的接口后面的游标管理代码
相关问题