C语言 为什么 GDB 不显示导致段错误的函数的地址


#include<stdio.h>
int main(void)
{
main();
return 0;
}

给出分段错误(核心转储)。此外,带有核心的 gdb 提供以下内容:

warning: Can't read pathname for load map: Input/output error.
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fff653ca000
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0  main () at mainrecurs.c:6
6   main();

我的问题是为什么它不显示函数的地址,即 main。通常它也会显示地址。

在 Ubuntu 12.04 上运行,使用 gcc 编译

更新

(gdb) info reg
rax            0x7fee4d32d568   140661474121064
rbx            0x0  0
rcx            0x4004d0 4195536
rdx            0x7fff8aba4718   140735520851736
rsi            0x7fff8aba4708   140735520851720
rdi            0x1  1
rbp            0x7fff8a3a6000   0x7fff8a3a6000
rsp            0x7fff8a3a6000   0x7fff8a3a6000
r8             0x400560 4195680
r9             0x7fee4d340740   140661474199360
r10            0x7fff8aba4480   140735520851072
r11            0x7fee4cf92680   140661470340736
r12            0x4003d0 4195280
r13            0x7fff8aba4700   140735520851712
r14            0x0  0
r15            0x0  0
rip            0x4004b8 0x4004b8 <main+4>
eflags         0x10246  [ PF ZF IF RF ]
cs             0x33 51
ss             0x2b 43
ds             0x0  0
es             0x0  0
fs             0x0  0
---Type <return> to continue, or q <return> to quit---
gs             0x0  0

UPDATE2

当我使用没有 -g 选项的 gcc 编译时。我正在关注 gdb:

Reading symbols from /home/a.out...(no debugging symbols found)...done.
[New LWP 2121]
warning: Can't read pathname for load map: Input/output error.
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fffabb90000
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0  0x00000000004004b8 in main ()

现在地址是可见的,但是为什么没有调试选项它会给出地址? 地址与上面在print reg中显示的地址相同<</p>

div class="ans>

如果我没记错的话,这个:

#0  main () at mainrecurs.c:6
6   main();

正是您正在寻找的。一个 C 文件、一个(正确的)行号以及它发生的函数。

此段错误是堆栈溢出,因为您递归调用 main()

如果您注意警告,您将收到如下警告:

警告 C4717:"main":在所有控制路径上递归,函数将 导致运行时堆栈溢出

gdb 会在失败的地方为您提供行号。

6 主();

相关内容

  • 没有找到相关文章

最新更新