.net - 在混合模式 C++ 项目中从 CLR 到 SEH 异常获取敏感信息

标签 .net c++ exception-handling c++-cli

混合模式 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/

相关文章:

c++ - 对于调用结果的复制初始化顺序,它是否被认为是 GCC 和 Clang 的错误?

windows - 异常处理

c++ - 如何有效地制作唯一路径名的 vector

.net - 处理文化中受支持的日期时间值的有限范围时,最佳实践是什么?

c# - 在 .NET 中,调用 .Count() 还是调用 .Count 更好?

c# - 在 Entity Framework 中查找给定主键的对象

c++ - if-else 取决于 T 是否为完整类型

java - 在 Java 中捕获 Scala 中抛出的异常 - 无法访问的 catch block

java - Scala future 和 `andThen` 异常传播

.net - MS Access 数据库