通过 libstdc++ 调试

Posted

技术标签:

【中文标题】通过 libstdc++ 调试【英文标题】:Debug through libstdc++ 【发布时间】:2013-04-08 02:01:11 【问题描述】:

我在 GNU/Linux 上使用 gcc,并且安装了 libc 和 libstd++ 的调试文件和头文件。但我不知道如何告诉 gdb 使用它们的源代码,尤其是调试到 libstd++ 中。 libstdc++ 本身的源代码似乎以复杂的结构提供。我认为 directory 命令是正确的选择。我在这里使用 Debian/Ubuntu 并将带有 apt-get source libstdc++6 的源代码下载到我的主目录中。

我很确定我不需要对 Fedora 采取特殊措施(几年前)。也许Fedora为此做了特殊的准备。所以我会很高兴看到适合每个发行版的一般说明。

谢谢

更新 我发现,除了-g,我还需要用-D_GLIBCXX_DEBUG 编译,所以编译命令看起来像$ g++ -o test test.cpp -g -D_GLIBCXX_DEBUG

此外,我收到有关缺少 漂亮打印机 的警告,我按照此处所述解决了该问题: http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.gdb

现在我可以调试到 libstdc++,但我总是收到这条消息:

Breakpoint 1, main () at test.cpp:9
9       string str = "str";
(gdb) s
std::allocator<char>::allocator (this=0x7fffffffe1e0)
    at /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h:104
104 /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory.
(gdb) s
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (
    this=0x7fffffffe1c0, __s=0x402930 "str", __a=...)
    at /usr/include/c++/4.7/bits/basic_string.tcc:217
217                    __s + npos, __a), __a)

我不需要将 gdb 中的 目录 设置为我下载的源(我认为它会搜索我的主目录)。所以我想我需要一个不同的命令来解决这个问题并找到“设置替代路径”并将其指向 /home/username/gcc-4.7-4.7.2/gcc-4.7.2/libstdc++-v3强> 但我不工作。为什么 gdb 在完全错误的地方寻找 allocator.h

【问题讨论】:

您的确切set substitute-path 命令是什么? 【参考方案1】:

首先找出来源:- https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html

稍后编译 libstdc++,并将 DEBUG_FLAGS 设置为 ON。

然后,尝试使用 gdb 进行调试。

【讨论】:

以上是关于通过 libstdc++ 调试的主要内容,如果未能解决你的问题,请参考以下文章

缺少单独的调试信息,使用:debuginfo-install glibc-2.12-1.47.el6_2.9.i686 libgcc-4.4.6-3.el6.i686 libstdc++-4.4.6-

gcc:查找 libstdc++ 的目录

Xcode有关lstdc++报错

libstdc++适配Xcode10与iOS12

libstdc++.so.6:未找到版本 GLIBCXX_3.4.20

linux libstdc++.a和libstdc++.so功能一样吗