如何在给定 _EXCEPTION_POINTERS 结构的情况下获取导致结构化异常的模块名称? (win32 C++)
(Win32平台C++) 使用__try和__finally,如何获取异常原因的模块名称(和地址)? 我调用 GetExceptionInformation() 但从中我不确定该信息在哪里。
鉴于在线和 MSDN 中的其他资源,Minidump 处理程序和其他示例代码似乎能够获取它,但我不确定如何获取。
任何参考或更具启发性的资源都将受到赞赏。
(Win32 platform c++)
Using __try and __finally, how can I get the module name (And address) of the cause for an exception? I call GetExceptionInformation() but from that I am not sure where this information is.
Given other resources online and in MSDN the Minidump handlers and other sample code seem to be able to get it, but I am not sure how.
Any references or more enlightening resources are appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
EXCEPTION_POINTERS 提供的 EXCEPTION_RECORD 记录包括发生异常的地址。 然后,您可以使用 EnumProcessModules() 和 GetModuleInformation() 来定位异常地址所在的模块,然后使用 GetModuleFileNameEx() 获取该模块的文件名。
The EXCEPTION_RECORD record provided by EXCEPTION_POINTERS includes the address where the exception occured. You can then probably use EnumProcessModules() and GetModuleInformation() to locate the module that the exception address falls within, and then use GetModuleFileNameEx() to get that module's filename.
您想要遍历调用堆栈,如这篇 CodeProject 文章中所述。
您可以按原样使用 Jochen 的代码,或者尝试收集足够的细节来提取您想要的信息。
You want to walk the callstack, as described in this CodeProject article.
Either you can use Jochen's code as it is, or try to harvest enough details to extract the information you want.