如何检测CLR抛出的异常?

时间:2016-07-08 16:19:18

标签: windows debugging winapi clr

我在调试第三方应用程序时使用WaitForDebugEvent() API来处理调试事件。我经常捕获CLR抛出的访问冲突(debugee正在使用一些.NET库)。后来当我用WinDbg分析迷你转储时,我看到了。我可以在WaitForDebugEvent()返回时立即检测到来自CLR的此类异常吗?

以下是捕获的异常的详细信息:

EXCEPTION_RECORD:  (.exr -1)  
ExceptionAddress: 000007fef7e870eb (clr!EEFileLoadException::Throw+0x00000000000001ac)  
ExceptionCode: c0000005 (Access violation)  
ExceptionFlags: 00000000  
NumberParameters: 2  
   Parameter[0]: 0000000000000000  
   Parameter[1]: 000000000000007d  
Attempt to read from address 000000000000007d

1 个答案:

答案 0 :(得分:0)

来自CLR的所有异常都具有0xE0 ******和NumberParameters>形式的ExceptionCode。 3.最常见,我看到 - e0434352(0xe0000000 +'CCR') - 例如 - this: -

  

未知异常 - 代码e0434352(第一次机会)是一个很大的线索   这里。如果您查看错误,您可能会看到一些看起来像的十六进制   熟悉的'0x43''0x43''0x52'或'C''C''R'。不,这不是一种敬意   对Creedence而言并不意味着有一个糟糕的月亮升起。这说明   我从CLR运行时抛出错误。甜。事情   更容易一点。

另一个常用代码 - 0xE0434F4D(0xe0000000 +'COM') - How CLR maps SEH exceptions to managed exception types

编辑:

  

CLR抛出的访问冲突

你的意思是直接STATUS_ACCESS_VIOLATION异常?在这种情况下无法检测,但我从来没有在CLR直接看到这一点。或者当CLR抛出RaiseException并且在ExceptionInformation [0]中 - > STATUS_ACCESS_VIOLATION?