c++ - 为什么GDB尝试列出不存在的 header ?

标签 c++ compilation gdb

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

在Makefile中,我使用以下命令编译自己的objs:

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。它一直进入标准库,因此我跟随this script recommendation跳过以/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.

最佳答案

Why did GDB source them?



当执行start命令时,gdb开始运行程序,并在main的开头停止。除其他外,gdb会加载与程序链接的所有动态链接库。其中之一是标准C++库libstdc++。加载时,gdb还将加载它的调试信息,其中存在带有/build/gcc/*前缀的文件。如果您不打算调试libstdc++,则无需将它们保留在您的计算机上。

关于c++ - 为什么GDB尝试列出不存在的 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61536112/

相关文章:

c++ - 如何检查cin中是否有任何东西[C++]

c++ - 使用低级 WinAPI 调用的 C++ 中的 Windows 窗体自动化?

c++ - 具有多态性和不同数据结构的程序设计

compilation - 编译器和转译器之间的主要区别是什么?

C++ 编译错误 - undefined reference

gdb - GDB 中用一条命令打印多个变量

c++ - 虚函数指针混淆

compilation - 动态链接和静态链接的指令点值

python - 使用 gdb 时数据目录中有多个目录

gdb - 我们可以在GDB session 中定义新的数据类型吗