Ubuntu上的C ++应用程序。安装gcc 4.8.1后,gdb不起作用

时间:2013-10-02 03:51:44

标签: gcc gdb

我在Ubuntu 12.04上安装了gcc 4.8.1(我必须添加ppa才能这样做)现在gdb显示以下消息:

无法找到动态链接断点功能。 GDB将无法调试共享库初始化程序 并跟踪显式加载的动态代码。不能加载5个库的共享库符号,例如/usr/lib/x86_64-linux-gnu/libstdc++.so.6。 使用“info sharedlibrary”命令查看完整列表。 你需要“set solib-search-path”或“set sysroot”吗?

我做谷歌,我发现这篇文章最能回答我的问题: http://www.fayewilliams.com/2013/01/31/gdb-unable-to-find-dynamic-linker-breakpoint-function/

然而,我仍然不明白该怎么做。有人可以帮忙吗THX!

2 个答案:

答案 0 :(得分:13)

我也有同样的问题,并且能够解决它。

我从这个PPA(https://launchpad.net/~ubuntu-toolchain-r/+archive/test)安装了最后一个“稳定”版本的GCC(4.8.1),一切都很完美,直到我不得不处理调试问题。您可以注意到,在此PPA中,工具链未提供用于处理编译器升级的GDB的更新版本。事实上,我没有发现任何PPA提供更新版本的GDB。

在我的情况下,我解决了从其网站(http://www.sourceware.org/gdb/)下载并安装最新稳定版GDB(7.6)的情况。这个版本的GDB能够解析这些符号,并为我提供使用Gcc 4.8.1生成的二进制文件的所有必要信息,即使我使用新的c ++ 11标准(使用-std = c ++编译的代码) 11旗)。

考虑到默认情况下手动安装此新版本的GDB将在 / usr / local / bin / gdb 中安装二进制文件。

答案 1 :(得分:2)

Gdb通常随工具链一起提供。

您可能正在使用之前工具链附带的gdb。使用

  which gdb

发现您正在使用的gdb。

要调试使用新编译器编译的程序,必须使用新的gdb,无论它是什么。