从混合模式c++项目中的CLR-to-SEH异常中获取明智的信息
Getting sensible info from CLR-to-SEH exceptions in a mixed mode C++ project
混合模式c++项目。本机代码正在调用托管代码。托管代码可能会抛出异常。我可以在本机模式下使用矢量异常处理程序捕获该异常;我可以看到它的PEXCEPTION_POINTERS
。告诉代码0xE0434F4D,这意味着它是一个CLR异常,在那里。
问题:是否有任何方法可以从伴随数据中获得任何明智的信息(异常类,消息,堆栈跟踪等)?在ExceptionInformation
中有一个参数,它看起来像一个指针…
不行,太晚了。你得到的只有异常代码。如果原始托管异常是由处理器故障引起的,那么您可能会在ExceptionInformation中得到一些信息。比如NullReference或者AccessViolation。这将没有帮助,因为您不再知道原始的SEH异常。使用COM给你一个更好的老鼠陷阱,CLR实现了IErrorInfo。但是你要运行的托管代码可能不是ComVisible。通过捕获Exception的托管存根调用代码可能是一个更好的角度。
这里也有类似的答案:
通过非托管代码捕获CLR异常
此问题已通过以下方式解决:
#import <mscorlib.tlb> raw_interfaces_only no_smart_pointers named_guids no_implementation
ATL::CComPtr< IErrorInfo > spErrorInfo;
ATL::CComPtr< mscorlib::_Exception > spCLRException;
ATL::CComPtr< mscorlib::_Exception > spCLRInnerException;
ATL::CComBSTR bstrCLRStackTrace;
ATL::CComBSTR bstrCLRMessage;
GetErrorInfo(0, &spErrorInfo)
spErrorInfo.QueryInterface(&spCLRException)
spCLRException->get_InnerException(&spCLRInnerException)
spCLRInnerException->get_StackTrace(&bstrCLRStackTrace)
spCLRInnerException->get_Message(&bstrCLRMessage)
相关文章:
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 如何从 LIBPCAP 获取信息?
- 如何使用 windbg "dt"命令从命名空间污染的内存转储中获取信息
- 从一个案例获取信息到另一个案例
- 我想从文本文件中获取信息并将该信息分配给类对象
- 从Blender获取信息C++(DeviceContext,RenderContext,Scene-Informatio
- 从文本文件c++中获取信息并进行匹配
- CORBA客户端/服务器应用程序,从服务器获取信息(空值)
- 如何解析html并获取信息
- C++套接字 WEB 从特权站点获取信息
- 如何从main到void获取信息
- 从内存进程中获取信息
- 在不遍历文件内容的情况下从文件中获取信息
- 如何在连接到网站时获取信息
- 如何从外部资源中获取信息
- 从EXCEPTION_RECORD中获取信息
- 是否有一种方法可以从VS环境之外的MS单元测试框架中获取信息
- 从标准输出(c++)中获取信息
- 你能像如何从Jar文件中获取信息一样从c++ Lib文件中获取信息吗?
- 如何在c++中从文件中随机获取信息