【发布时间】:2016-11-11 07:10:57
【问题描述】:
我在调试第三方应用程序时使用WaitForDebugEvent() API 来处理调试事件。我经常发现 CLR 引发的访问冲突(被调试者正在使用一些 .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
【问题讨论】:
-
这很清楚,但正如之前有人所说,SO 早就下地狱了。如今,这更像是一场由声望高的人领导的撒尿比赛。
-
好吧,我最初赞成你的问题,因为我同意它很清楚并且可能很有趣。编辑让我更加困惑。我以为您是在说,当您使用 WaitForDebugEvent 时,您看不到 CLR 抛出的异常,而是在询问如何接收这些异常的通知。对我来说似乎是一个有效的问题。那么你编辑的这些异常细节是从哪里来的呢?这里的实际问题是什么?术语的不精确使用也无济于事。当您“捕获”异常时,这意味着异常处理程序,而不是 WaitForDebugEvent 返回 TRUE
-
现在清楚了。好的 - 您可以在 clr.dll 中查看 ExceptionAddress - 这意味着“由 CLR 抛出”?那么在什么问题上呢?
-
但是下一刻这里很有趣 - 异常直接在 clr!EEFileLoadException::Throw+0x00000000000001ac 地址?不是在这个函数代码中调用而是直接调用 RaiseException(或模拟)?
标签: windows debugging winapi clr