C++ GDB读取带有“的符号”;符号文件";核心文件上的命令

C++ GDB读取带有“的符号”;符号文件";核心文件上的命令,c++,gdb,core-file,C++,Gdb,Core File,我试图在linux上分析一个核心文件上的segfault。我不确定以下行为是否正确,因此我故意使用 #include <signal.h> int main() { raise(SIGSEGV); } 注意它在结尾是如何说“带有调试信息,而不是剥离的” 当我执行二进制文件时,生成了一个核心文件,名为core-mainTestFile.20474 (为了生成核心文件,我需要将ulimit设置为unlimit,即。 ulimit-c无限 ) 如果我只在GDB下运行二进制文件并执行回溯

我试图在linux上分析一个核心文件上的segfault。我不确定以下行为是否正确,因此我故意使用

#include <signal.h>
int main() {
raise(SIGSEGV); 
}
注意它在结尾是如何说“带有调试信息,而不是剥离的”

当我执行二进制文件时,生成了一个核心文件,名为core-mainTestFile.20474 (为了生成核心文件,我需要将ulimit设置为unlimit,即。 ulimit-c无限 )

如果我只在GDB下运行二进制文件并执行回溯“bt”,那么我将获得segfault,并获得所有相关函数的名称 打印得很好,即注意gdb在开始“从./mainTestFile读取符号…完成”时是如何表示的

那我就只有问号了

(gdb) bt
#0  0x00007f34d8842e97 in ?? ()
#1  0x0000000000000000 in ?? ()
当我执行“bt”时,我看不到方法的名称,而是得到问号

(gdb) bt
#0  0x00007f34d8842e97 in ?? ()
#1  0x0000000000000000 in ?? ()
我发现他们唯一的解决办法是直接在命令行提供二进制文件,然后很好地打印出来。 即使我试图告诉GDB使用符号文件,并将其指向具有符号的二进制文件 i、 e

然后GDB说

Reading symbols from /src/exe/mainTestFile...done
当我执行bt时,我又看到了问号?这是为什么。GDB不能从二进制文件中提取符号吗

仅当直接在命令上提供二进制文件时,它才起作用,如:

gdb /src/exe/mainTestFile -c core-mainTestFile.20474
我的问题是GDB在通过“symbol file”命令直接向他提供二进制文件时是否能够读取二进制文件的符号。当通过命令行直接向他提供二进制文件时,为什么会起作用,有什么区别

当通过“symbol file”命令直接向GDB提供二进制文件时,GDB是否能够读取二进制文件的符号

理论上,在GDB中以任意顺序使用
符号文件
核心文件
命令应该是等效的

但是有一个bug:
符号文件
后跟
核心文件
有效,相反的顺序无效

由于最终用户通常可以按照工作顺序重新排列其命令,因此这从未传播到任何GDB开发人员要修复的事情队列的顶部

相关的(但不是完全相同的)

symbol-file /src/exe/mainTestFile
Reading symbols from /src/exe/mainTestFile...done
gdb /src/exe/mainTestFile -c core-mainTestFile.20474