GDB调试Core文件出现问号?的原因
函数的调用其实是函数的入栈出栈操作,但当程序栈因程序的错误导致破坏了栈,这时候就会导致gdb解析core文件时解析不出来的情况,即是问号(?)
那还能做点什么呢?
可以通过打印\(rbp\)和\(rsp\)的值得到最后调用栈的栈底和栈顶。
(gdb) p $rbp
$40 = (void *) 0x7fffffffdff0
(gdb) p $rsp
$41 = (void *) 0x7fffffffdfe0
(gdb) x /8ag $rbp
0x7fffffffdff0: 0x7fffffffe010 0x400673 <b(int, char**)+46>
0x7fffffffe000: 0x7fffffffe118 0x100000000
0x7fffffffe010: 0x7fffffffe030 0x400695 <main(int, char**)+32>
0x7fffffffe020: 0x7fffffffe118 0x100000000
(gdb)
但如果这个地址间的数据也被破坏了,可以以此地址为基准,继续往上找,找到其他函数的栈信息(即栈回溯方法)
参考:https://blog.csdn.net/mseaspring/article/details/106346247