繁体   English   中英

Windows上GCC崩溃后转储堆栈

[英]Dumping stack after crash with gcc on Windows

我想为我的应用程序编写一个(或使用现有的)崩溃处理程序。 我遇到的问题是我希望将其用于Windows和gcc。

我深入搜索了这种解决方案,但只有VS解决方案。

到目前为止,我已经向SetUnhandledExceptionFilter注册了一个handler 根据我的观察,调用handler时,堆栈被“限制”到我的handler函数+一些额外的系统函数中。

原始堆栈似乎在其上方(根据传递给我的handler EXCEPTION_POINTERS存储的原始espebp )。

我试图将当前的espebp切换为已保存的espebp ,但通常会以崩溃告终。

我也尝试过使用posix' signal但是堆栈以相同的方式受到限制。

我一直在寻找答案,这是我得到的:

在Windows下应用程序崩溃的情况下,至少有两种方法可以找到实际的堆栈。

  1. 可以使用此处介绍的简单技巧来追溯堆栈。 必须使用EXCEPTION_POINTERS ebp成员,而不是实际的ebp寄存器。
  2. STACKFRAME64示例用法在这里

然后有必要将地址转换为函数名称。 在这里,我发现了3种方法:

  1. addr2line
  2. SymFromAddr
  3. bfd

有什么问题-所有这些都与特定的可执行文件一起使用。 有必要分别处理其他dll文件。

在我的程序中,我将尝试使用KDE5的KCrash + drkonqi 顺便说一下,这两个项目都是有价值信息的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM