为什么 GDB 尝试列出不存在的标头?



我是一个学习c++并使用gdb进行调试的noob。

在Makefile中,我使用编译我的个人对象

g++ -Wall -g -O0 -c foo.cc
g++ -Wall -g -O0 -c bar.cc
...

然后使用编译整个可执行文件

g++ -Wall -g -O0 foo.o bar.o -lncursesw 

然后我通过我的代码使用gdb来step。它不断进入标准库,所以我遵循了脚本建议跳过前缀为/usr/include/c++/*的绝对文件名。

现在我的问题

gdb试图列出不在我的机器上的文件。如果从gdb内部(在start命令之后(执行info sources,那么有一堆前缀为/build/gcc/*的文件不在我的机器上为什么GDB试图访问它们

当逐步通过时,我不能跳过文件,因为gdb会告诉我"没有这样的文件或目录">

std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream (this=0x7fffffffc680, __in_chrg=<optimized out>,
__vtt_parm=<optimized out>) at /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream:518
/build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream: No such file or directory.

为什么GDB会提供它们?

执行start命令时,gdb开始运行程序,并在main的开头停止。gdb加载程序链接的所有动态链接库。其中之一是标准C++库libstdc++。当它被加载时,gdb还会加载它的调试信息,其中存在前缀为/build/gcc/*的文件。如果您不打算调试libstdc++,那么就没有必要将它们保留在您的机器上。

最新更新