#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>
如果我没记错的话,这个:
#0 main () at mainrecurs.c:6
6 main();
正是您正在寻找的。一个 C 文件、一个(正确的)行号以及它发生的函数。
此段错误是堆栈溢出,因为您递归调用 main()
。
如果您注意警告,您将收到如下警告:
警告 C4717:"main":在所有控制路径上递归,函数将 导致运行时堆栈溢出
gdb 会在失败的地方为您提供行号。
6 主();