为什么GDB试图列出不带';不存在? 我是NoOB学习C++,使用GDB进行调试。p>
在Makefile中,我使用以下方法编译我的单个OBJ:为什么GDB试图列出不带';不存在? 我是NoOB学习C++,使用GDB进行调试。p>,c++,compilation,gdb,C++,Compilation,Gdb,在Makefile中,我使用以下方法编译我的单个OBJ: g++ -Wall -g -O0 -c foo.cc g++ -Wall -g -O0 -c bar.cc ... 然后使用以下命令编译整个可执行文件: g++ -Wall -g -O0 foo.o bar.o -lncursesw 然后,我使用gdb通过我的代码执行步骤。它不断进入标准库,因此我跳过了前缀为/usr/include/c++/*的绝对文件名 现在是我的问题 gdb尝试列出不在我的计算机上的文件。如果从gdb内部(在s
g++ -Wall -g -O0 -c foo.cc
g++ -Wall -g -O0 -c bar.cc
...
然后使用以下命令编译整个可执行文件:
g++ -Wall -g -O0 foo.o bar.o -lncursesw
然后,我使用gdb通过我的代码执行步骤
。它不断进入标准库,因此我跳过了前缀为/usr/include/c++/*
的绝对文件名
现在是我的问题
gdb尝试列出不在我的计算机上的文件。如果从gdb内部(在start
命令之后)执行info sources
,则有一堆前缀为/build/gcc/*
的文件不在我的计算机上为什么GDB试图访问它们?
当单步执行时,我不能跳过这些文件,因为gdb会告诉我“没有这样的文件或目录”
std::basic\u-ifstream::basic\u-ifstream(this=0x7fffffffc680,\u-in\u-chrg=,
__vtt_parm=)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:没有这样的文件或目录。
为什么GDB要把它们找出来
当您执行
start
命令时,gdb开始运行程序,并在main
的开头停止。除此之外,gdb加载程序链接的所有动态链接库。其中一个是LISSTDC +,标准C++库。加载时,gdb还会加载其调试信息,其中包含前缀为/build/gcc/*
的文件。如果您不打算调试libstdc++,则无需将它们保留在您的计算机上。更好的答案可能是“如果您不打算查看标准库例程,请不要进入其中”。@ks1322/build/gcc/*
是libstdc++的调试信息文件吗?如果是这样,它们不在我的机器上,我不想调试stdlib。所以我很困惑,为什么gdb试图寻找它们的来源,以及是什么告诉gdb它们存在于/build/gcc/*
目录中。@EmployedRussian确切地说。我不想查看标准库例程。我想跳过它们。我设法跳过了/usr/include/c++/*
,但由于/build/gcc/*
目录在我的机器上不存在,gdb在每一步都警告我它找不到该文件。我想知道gdb是从哪里想到列出/build/gcc/*
头的。当您进入libstdc++代码时,gdb会尝试为您显示它,因为它为libstdc++加载了调试信息。如果您不想这样做,请不要进入libstdc++代码或跳过带有/build/gcc/*
前缀的文件,就像您为/usr/include/c++/*
所做的那样,或者使用strip
删除libstdc++调试信息“我想知道gdb从哪里得到列出/build/gcc/*头的想法”它是通过查看标准库的调试符号得到这个想法的,标准库是从/build/gcc
中的源代码在某些计算机上构建的。gcc不知道也不可能知道这台计算机是否与它现在运行的计算机相同,以及您的目的是调试标准库还是其他什么。
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.