使用托管调试助手诊断错误

托管调试助手(MDA)是调试辅助程序,它与公共语言运行时(CLR)一起工作以提供关于运行时状态的信息。这些助手生成关于无法通过其它方式捕获的运行时事件的消息性消息。可以使用MDA隔离在托管代码和非托管代码之间转换时发生的难以发现的应用程序bug。可通过向Windows注册表添加注册表项或设置环境变量,启用或禁用所有的MDA。可使用应用程序配置设置来启用特定MDA。可以在应用程序的配置文件中为某些单独的MDA设置附加配置设置。由于将在运行时分析这些配置文件,因此必须在托管应用程序启动之前启用MDA。不能为已经启动的应用程序启动MDA。

启用 MDA 后,即使不在调试器下执行代码,MDA 也会处于活动状态。 如果在调试器不存在时引发 MDA 事件,尽管这不是未经处理的异常,事件消息也会出现在未经处理的异常对话框中。 若要避免出现该对话框,请在调试环境中未执行代码时移除 MDA 启用设置。

在 Visual Studio 集成开发环境 (IDE) 中执行代码时,可以避免针对特定 MDA 事件出现的异常对话框。 为此,请在“调试”菜单上单击“异常” (如果“调试”菜单不包含“异常”命令,请在“工具”菜单上单击“自定义”添加该命令。)在“异常”对话框中,展开“托管调试助手”列表,然后清除相应 MDA 的“引发”复选框。 例如,若要避免出现 contextSwitchDeadlock MDA 的异常对话框,请在“托管调试助手”列表中清除该 MDA 名称旁边的“引发”复选框。 也可以使用此对话框启用 MDA。

下表列出 .NET Framework 附带的 MDA。

asynchronousThreadAbort MDA

bindingFailure MDA

callbackOnCollectedDelegate MDA

contextSwitchDeadlock MDA

dangerousThreadingAPI MDA

dateTimeInvalidLocalFormat MDA

dirtyCastAndCallOnInterface MDA

disconnectedContext MDA

dllMainReturnsFalse MDA

exceptionSwallowedOnCallFromCom MDA

failedQI MDA

fatalExecutionEngineError MDA

gcManagedToUnmanaged MDA

gcUnmanagedToManaged MDA

illegalPrepareConstrainedRegion MDA

invalidApartmentStateChange MDA

invalidCERCall MDA

invalidFunctionPointerInDelegate MDA

invalidGCHandleCookie MDA

invalidIUnknown MDA

invalidMemberDeclaration MDA

invalidOverlappedToPinvoke MDA

invalidVariant MDA

jitCompilationStart MDA

loaderLock MDA

loadFromContext MDA

marshalCleanupError MDA

封送 MDA

memberInfoCacheCreation MDA

moduloObjectHashcode MDA

nonComVisibleBaseClass MDA

notMarshalable MDA

openGenericCERCall MDA

overlappedFreeError MDA

pInvokeLog MDA

pInvokeStackImbalance MDA

raceOnRCWCleanup MDA

重入 MDA

releaseHandleFailed MDA

reportAvOnComRelease MDA

streamWriterBufferedDataLost MDA

virtualCERCall MDA

默认情况下,.NET Framework 会为所有托管调试器激活 MDA 的子集。 通过单击“调试”菜单上的“异常”并展开“托管调试助手”列表可以查看 Visual Studio 中的默认集合。


你可能感兴趣的:(使用托管调试助手诊断错误)