4

使用 MinGW GDB 7.6 版,得到很多这样的回溯:

(gdb) bt
#0  0x000000007703d256 in ntdll!RtlEnterCriticalSection ()
   from C:\Windows\SYSTEM32\ntdll.dll
#1  0x0000000000000000 in ?? ()

这并不完全有用。

为什么是这样?反正有什么更有用的吗?当我得到的回溯发生错误时,尝试弄清楚一个复杂的多线程程序在做什么是绝对痛苦的。

4

2 回答 2

2

我在使用 MinGW 64 时遇到了同样的问题。使用编译器开关 -g3 -Og 最终很好地显示了所有回溯。

于 2016-06-18T06:58:35.033 回答
1

原因可能是 gdb 有一个“当前”线程的概念,恕我直言,它是随机选择的。

您可以通过发出 gdb 命令查看您的程序当前正在执行的线程info threads。通过 切换“当前”线程thread <num>。尝试再次获得有意义的回溯。

还要确保

  • 您的可执行文件是使用调试信息 ( -g) 编译的,
  • gdb 能够处理用于将调试信息编码到可执行文件中的格式。您可能想验证 gdb 是否可以在 `main()' 处设置断点并且在那里表现合理。
于 2014-01-14T23:19:11.310 回答