我在GNU/Linux上使用gcc,安装了libc和libstd++的调试文件和头文件。但我不知道如何告诉gdb使用它们的源代码,特别是调试到libstd++中。libstdc++本身的源代码似乎是以一个复杂的结构提供的。我认为目录命令是正确的选择。我在这里使用Debian/Ubuntu,并将带有apt源libstdc++6的源代码下载到我的主目录中。
我非常肯定,我不需要采取特殊的步骤,这与Fedora (几年前)。也许Fedora是以一种特殊的方式为这个做准备的。因此,我将很高兴得到一般的指示,适合每一次分发。
谢谢
更新
我发现,除了-D_GLIBCXX_DEBUG之外,我还需要使用-g进行编译,所以编译命令看起来像$ 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中的目录设置为我下载的源代码(我认为它在我的主目录中搜索)。因此,我想我需要一个不同的命令来修复这个问题,并找到了"set替代路径“,并将其指向/home/username/gcc-4.7-4.7.2/gcc-4.7.2/libstdc++-v3,但是我没有工作。为什么gdb要在完全错误的地方寻找分配程序.h?
发布于 2017-01-22 06:51:46
首先找出来源:- https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html
稍后,用libstdc++将其设置为DEBUG_FLAGS编译它。
然后,尝试使用gdb进行调试。
https://stackoverflow.com/questions/16023934
复制相似问题