GDB 窗口 ??在回溯中

GDB Windows ?? in Backtraces

本文关键字:回溯 GDB 窗口      更新时间:2023-10-16

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

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

这并不完全有用。

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

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

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

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

还要确保

  • 您的可执行文件是使用调试信息(-g)编译的,
  • GDB 能够处理用于将调试信息编码到可执行文件中的格式。您可能希望验证 gdb 是否可以在"main()"处设置断点,并且在那里的行为是否合理。