代码之家  ›  专栏  ›  技术社区  ›  Wim Coenen

如何修复visual studio调试器发出的“检测到可重入”警告?

  •  1
  • Wim Coenen  · 技术社区  · 14 年前

    当在调试模式下运行单元测试时,在某个时刻,visual studio调试器将中断以显示 reentrancy MDA . 链接的文章解释了当 低级操作系统扩展点,如矢量异常处理程序 调用回托管应用程序代码。

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

    我在看 stacktrace 在显示这个警告的地方,但是我很难找出这里涉及的是哪个“低级操作系统扩展点”。除了mstest和调用 System.Windows.Forms.Cursors.VSplit 消气剂。另外,仅仅从单元测试调用getter似乎不足以触发警告。

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Community Egal    7 年前

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

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

    • 严格遵循mvvm模式,并在视图中隔离有问题的代码,只测试viewmodel。
    • 或者将光标管理代码隐藏在单元测试中模拟的接口后面
    推荐文章