混合模式 C++ 项目。 native 代码正在调用托管代码。托管代码可能会引发异常。我可以使用 vector 异常处理程序在 native 模式下捕获所述异常;我可以看到它的 PEXCEPTION_POINTERS
。告诉代码 0xE0434F4D,意味着它是一个 CLR 异常,就在那里。
问题:有什么方法可以从伴随数据中获取任何有意义的信息(异常类、消息、堆栈跟踪等)? ExceptionInformation
中有一个参数,它看起来像是指向某物的指针...
最佳答案
不,太晚了。您得到的只是异常代码。如果原始托管异常是由处理器故障引起的,您可能会在 ExceptionInformation 中得到一些信息。像 NullReference 或 AccessViolation。这不会有帮助,因为您不再知道原始的 SEH 异常。使用 COM 给你一个更好的鼠标陷阱,CLR 实现 IErrorInfo。但是您尝试运行的托管代码可能不是 [ComVisible]。通过捕获异常的托管 stub 调用代码可能是一个更好的角度。
关于.net - 在混合模式 C++ 项目中从 CLR 到 SEH 异常获取敏感信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015844/