我是一个学习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/