在 Windows 中的 MinGW 中打印堆栈跟踪

问题描述 投票:0回答:2

我正在尝试找出我的多线程应用程序崩溃的原因。

因此,我使用 SetUnhandledExceptionFilter 安装未处理异常的处理程序,然后在处理程序中展开并打印堆栈跟踪。它有效..有点.

我尝试了网上的很多例子,但我总是得到这样的东西:

1 - 0x00401ecc - Unknown Function
2 - 0x00401e83 - Unknown Function
3 - 0x004013fa - Unknown Function
4 - 0x7584336a BaseThreadInitThunk
5 - 0x77dc9f72 RtlInitializeExceptionChain
6 - 0x77dc9f45 RtlInitializeExceptionChainPress <RETURN> to close this window...

从来没有发生错误的实际位置。

任何人都可以给出一个在 Windows 上打印未处理异常的堆栈跟踪的真实工作示例吗?非常感谢。

c++ gcc mingw callstack
2个回答
3
投票

如果它发生在您用于开发的机器上:

  • 使用 IDE(Eclipse CDT、Qt Creator 等)和 gdb 作为调试器,
  • 关闭编译器优化 (
    -O0
    ),
  • 使用调试符号进行编译enabled(将
    -ggdb3
    标志传递给编译器)。

如果它发生在客户端计算机上,那么情况会更复杂,请参阅:


0
投票

我遇到了确切的问题,并将 MinGW 降级至 7.5 并得到修复。 最新版本的 MinGW 的 Boost 存在问题,导致无法打印堆栈跟踪。您必须使用相当旧的版本,这可能会不舒服。

这是我发现能够打印 MinGW 堆栈跟踪的唯一解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.