我在调试第三方应用程序时使用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
答案 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?