我有一些调用 Rotativa 的代码,它调用 wkhtml2pdf。我怀疑我看到 wkhtml2pdf.exe 导致抛出损坏状态异常 (CSE) 的行为。如果抛出 CSE,我想捕获并记录它,这样我就可以追踪它发生的位置。
当我让应用程序在调试器中整夜运行时,当我回来时,VS 已关闭。有时它已重新启动,有时则没有。怀疑内存损坏我开始研究并偶然发现了 CSE 处理。
我正在做这样的事情:
[HandleProcessCorruptedStateExceptions]
void DoStuff()
{
try
{
DOThatThingThatMakesTheDebuggerHaltAndShutDown();
}
catch(Exception ex)
{
//how do I detect that it's a CSE in here, so I can log it especially blatantly
}
}
有没有办法检测异常是否是 General Catch 中的 CSE?
我看到他们有 2 个一般例外条款。内部不处理 CSE 并设置一个标志。如果在没有标志的情况下调用外部的,则它是 CSE,但我希望有更清洁的东西。我想做的是记录这个糟糕的状态,然后将它传递给应用程序以正常冒泡。
当我查看导致 VS2013 崩溃的事件日志中的错误时,我得到以下信息:
应用程序:devenv.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:异常代码 c0000005,异常地址 4DA44C1F 堆栈:Microsoft.VisualStudio.Debugger.Clr.NativeDkmClrModuleInstance.ProcF4BC786AEBAC294EE9C4C0BB1B0F56A7(IntPtr, IntPtr ByRef) 上 Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance.GetMetaraceData.Conport() .MetadataHelper..ctor(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance) 在 Microsoft.IntelliTrace.Concord.Integration.CpdeNotifyPointServiceAdapter.InstallBreakpoint(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance, Microsoft.VisualStudio.Debugger.Interop.Internal.NP_INSTALL_REQUEST )
在 Microsoft.IntelliTrace.Concord.IntelliTraceProcessState.AlertModuleLoad(Microsoft.VisualStudio.Debugger.DkmModuleInstance) 在 Microsoft.IntelliTrace.Concord.NotifyPoints 在 Microsoft.IntelliTrace.Concord.Integration.CpdeNotifyPointServiceAdapter.BindToModule(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance) .NotifyPointManager.OnModuleInstanceLoad(Microsoft.VisualStudio.Debugger.DkmModuleInstance, Microsoft.VisualStudio.Debugger.DkmWorkList, Microsoft.VisualStudio.Debugger.DkmEventDescriptorS) 在 Microsoft.VisualStudio.Debugger.EntryPoint.IDkmModuleInstanceLoadNotification_OnModuleInstanceLoad(IntPtr, IntPtr, IntPtr, IntPtr)
其次是:
错误应用程序名称:devenv.exe,版本:12.0.30501.0,时间戳:0x5361f453 错误模块名称:vsdebugeng.impl.DLL,版本:12.0.30501.0,时间戳:0x5361f482 异常代码:0xc0000005 错误偏移:0x00094c1f 错误进程 id: 0x1c9c 错误应用程序启动时间:0x01cfe7cc0cf50465 错误应用程序路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe 错误模块路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\ Common7\Packages\Debugger\vsdebugeng.impl.DLL 报告 ID:097b17c6-5438-11e4-8409-001f2904053c