在调试模式下运行单元测试时,Visual Studio调试器会在某个时刻中断以显示reentrancy MDA。链接的文章解释说,当低级操作系统扩展点(例如向量异常处理程序)回调到托管应用程序代码时,会发生这种情况。
显然这会导致堆损坏或其他严重问题,所以我肯定想修复它。
我正在查看显示此警告的stacktrace,但是我无法确定这里涉及哪个“低级操作系统扩展点”。除了mstest引起的一次转换和调用System.Windows.Forms.Cursors.VSplit
getter之外,我没有看到任何非托管/托管转换。此外,简单地从单元测试中调用getter似乎不足以触发警告。
我在这里做错了什么,我该如何解决?
答案 0 :(得分:2)
正如Hans Passan建议的那样(虽然不幸的是他现在已经删除了他的答案),问题是在我的单元测试中我调用的代码只是在GUI线程的上下文中调用带有消息循环。单元测试中没有这样的消息循环。
在这种情况下,问题是System.Windows.Forms.Cursors.VSplit
getter。我认为有两种方法可以避免这种情况: