C++ Windows上gcc崩溃后转储堆栈
我想为我的应用程序编写(或使用现有)崩溃处理程序。 我的问题是,我希望它适用于Windows和gcc 我深入地寻找这样的解决方案,但只有一个 到目前为止,我已经有一个C++ Windows上gcc崩溃后转储堆栈,c++,windows,gcc,C++,Windows,Gcc,我想为我的应用程序编写(或使用现有)崩溃处理程序。 我的问题是,我希望它适用于Windows和gcc 我深入地寻找这样的解决方案,但只有一个 到目前为止,我已经有一个处理程序注册到SetUnhandledExceptionFilter。 根据我在调用handler时的观察,堆栈被“限制”为我的handler函数+一些额外的系统函数 原始堆栈似乎位于其上方(根据传递给我的处理程序的异常指针中存储的原始esp和ebp) 我试图将当前的esp和ebp切换到已保存的,但通常以崩溃告终 我也尝试过使用po
处理程序注册到SetUnhandledExceptionFilter
。
根据我在调用handler
时的观察,堆栈被“限制”为我的handler
函数+一些额外的系统函数
原始堆栈似乎位于其上方(根据传递给我的处理程序的异常指针中存储的原始esp
和ebp
)
我试图将当前的esp
和ebp
切换到已保存的,但通常以崩溃告终
我也尝试过使用posix'信号,但堆栈也受到同样的限制。我一直在寻找答案,下面是我得到的:
在windows下,有(至少)两种方法可以在应用程序崩溃时找到真正的堆栈
堆栈可以用描述的简单技巧进行回溯。必须使用EXCEPTION\u指针中的ebp
成员,而不是realebp
寄存器
STACKFRAME64
示例用法
然后有必要将地址转换为函数名。在这里,我找到了3种方法:
addr2line
SymFromAddr
有什么问题?所有这些都与特定的可执行文件一起工作。有必要单独处理额外的dll文件
在我的程序中,我将尝试使用KDE5的+。顺便说一句,这两个项目都是有价值的信息来源。你没有问过任何问题。这不是很明显吗?我不知道如何在使用gcc编译的windows应用程序崩溃时转储堆栈。您不知道的事实不是问题。