Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么GDB试图列出不带';不存在? 我是NoOB学习C++,使用GDB进行调试。p>_C++_Compilation_Gdb - Fatal编程技术网

为什么GDB试图列出不带';不存在? 我是NoOB学习C++,使用GDB进行调试。p>

为什么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

在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内部(在
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.