使用制表符完成打印变量时gdb冻结

Jun*_*Cas 6 c++ debugging gdb

我编译的c ++项目,不是太大,大约是6M二进制文件.当我调试它并想要打印一些变量时,我输入前两个字符并按Tab键完成.然后gdb读取符号永远冻结.我怎么解决这个问题.谢谢!

Emp*_*ian 3

我输入前两个字符并按 Tab 键完成。然后 gdb 读取符号永远冻结。我怎么解决这个问题

医生,我这样做的时候会很痛。

好吧,不要这样做。

说真的,如果你有一个非常大的二进制文件(不清楚你的 6MB 是否是带有调试信息的大小),并且有很多变量,那么 GDB必然会与你的两个初始字符匹配的变量。

也就是说,

  • 我们经常调试大小为 2GB 或更大的二进制文件,并且
  • 我们花费了大量的精力来改善 GDB 对此类二进制文件的体验

因此,也许您的第一步应该是使用最新版本的 GDB,看看问题是否已经为您解决。

更新:

我的二进制文件大小为 6MB,包含调试信息

那根本就不大。当然,列出此类二进制文件中的所有变量不应导致超过几秒钟的延迟。

我的 GDB 版本是“GNU gdb (GDB) 7.6.2”

这是最新版本。

可以肯定地得出 GDB 中存在错误的结论。

如果您可以构建一个显示问题的最小测试用例,那么最好的选择是将其报告为http://sourceware.org/bugzilla中的错误中。

如果不能,则必须自己调试 GDB。一个合理的起点是运行strace -p <pid-of-hung-gdb>gdb -p <pid-of-hung-gdb>; (gdb) where找出 GDB 陷入困境的确切位置。