我是一个学习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++,那么就没有必要将它们保留在您的机器上。