.net 4.0 .net 4调试api在被调试对象中导致访问冲突

.net 4.0 .net 4调试api在被调试对象中导致访问冲突,.net-4.0,debugging,com-interop,access-violation,mixed-mode,.net 4.0,Debugging,Com Interop,Access Violation,Mixed Mode,在启动过程中,.NET4调试api有没有可能以某种方式破坏应用程序的状态 我的问题如下: 如果我使用.net调试api(visual studio 2010,sharp develop 4,mdbg)从调试器中启动应用程序,我会遇到各种随机访问冲突 如果我从一个调试器中启动我的应用程序,而不是使用.net调试api(delphi 2007,带sos扩展的windbg),那么一切都可以正常工作 如果我直接启动我的应用程序,然后在上面附加一个调试器(比如VisualStudio2010、sharp

在启动过程中,.NET4调试api有没有可能以某种方式破坏应用程序的状态

我的问题如下:

  • 如果我使用.net调试api(visual studio 2010,sharp develop 4,mdbg)从调试器中启动应用程序,我会遇到各种随机访问冲突
  • 如果我从一个调试器中启动我的应用程序,而不是使用.net调试api(delphi 2007,带sos扩展的windbg),那么一切都可以正常工作
  • 如果我直接启动我的应用程序,然后在上面附加一个调试器(比如VisualStudio2010、sharp develop 4、mdbg、delphi 2007、windbg),一切都会正常工作
  • 如果我回到.NET3.5和CLR2.0,我一点问题都没有
那么,托管调试api中从.net 3.5到4.0的哪些变化导致我的应用程序在启动时抛出访问冲突呢

该应用程序是用delphi(非托管)和c#(托管)编写的,用于执行互操作


我几乎不能给出任何例子来重现这个问题,所以我知道回答这个问题可能是不可能的,但是如果对调试api有更多了解的人能给我一个正确方向的提示,或者能帮助我缩小范围,我将非常感谢。

只是为了好玩,请尝试禁用Visual Studio宿主进程。在VisualStudio中,右键单击项目,转到“调试”选项卡,并取消选中“启用VisualStudio冲洗过程”复选框


我们在运行32位应用程序的64位系统上的托管/非托管区域中看到了一些奇怪的东西。

一些基于经验的附加信息:重要的是使用COMPLUS_MDA环境变量(记住以后重新启动VS2010),而不是MDA注册表项。我尝试按照MSDN文章中的描述设置注册表项(然后重新启动计算机),因为文章指出这应该会有相同的结果,但没有成功。

谢谢!这些托管调试助手(MDA)似乎出了问题。如果未安装visual studio并使用mono develop或sharp develop,则可以通过设置环境变量COMPLUS_MDA=0来禁用MDA。有关更多详细信息,请参阅: