C++ Windows上gcc崩溃后转储堆栈

C++ Windows上gcc崩溃后转储堆栈,c++,windows,gcc,C++,Windows,Gcc,我想为我的应用程序编写(或使用现有)崩溃处理程序。 我的问题是,我希望它适用于Windows和gcc 我深入地寻找这样的解决方案,但只有一个 到目前为止,我已经有一个处理程序注册到SetUnhandledExceptionFilter。 根据我在调用handler时的观察,堆栈被“限制”为我的handler函数+一些额外的系统函数 原始堆栈似乎位于其上方(根据传递给我的处理程序的异常指针中存储的原始esp和ebp) 我试图将当前的esp和ebp切换到已保存的,但通常以崩溃告终 我也尝试过使用po

我想为我的应用程序编写(或使用现有)崩溃处理程序。 我的问题是,我希望它适用于Windows和gcc

我深入地寻找这样的解决方案,但只有一个

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

原始堆栈似乎位于其上方(根据传递给我的
处理程序的
异常指针中存储的原始
esp
ebp

我试图将当前的
esp
ebp
切换到已保存的,但通常以崩溃告终


我也尝试过使用posix'
信号,但堆栈也受到同样的限制。

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

在windows下,有(至少)两种方法可以在应用程序崩溃时找到真正的堆栈

  • 堆栈可以用描述的简单技巧进行回溯。必须使用
    EXCEPTION\u指针中的
    ebp
    成员,而不是real
    ebp
    寄存器
  • STACKFRAME64
    示例用法
  • 然后有必要将地址转换为函数名。在这里,我找到了3种方法:

  • addr2line
  • SymFromAddr
  • 有什么问题?所有这些都与特定的可执行文件一起工作。有必要单独处理额外的dll文件


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

    你没有问过任何问题。这不是很明显吗?我不知道如何在使用gcc编译的windows应用程序崩溃时转储堆栈。您不知道的事实不是问题。