我的程序是使用Dietlibc静态编译的。它在ubuntu x64上编译(使用-m32标志为x86编译),并在centos x86上运行。
编译后的大小仅约100KB。我用-ggdb3编译它,没有优化标志。
我的程序使用signal.h处理SIGSEGV信号,然后调用abort()。
该程序运行数天没有问题,但有时会出现段错误。这是当我得到我不理解的奇怪回溯信息时:
username @ ubuntu:〜/Desktop $ gdb -c core.28569程序名
GNU gdb(GDB)7.2
版权所有(C)2010自由软件基金会公司。
许可证GPLv3 +:GNU GPL版本3或更高版本
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,没有任何担保。键入“显示复制”
和“显示保修”了解详情。
该GDB被配置为“--host = x86_64-linux-gnu --target = i386-linux-gnu”。
有关错误报告的说明,请参见:
...
从程序名称中读取符号...完成。
[新主题28569]
核心是由“程序名”生成的。
程序以信号6终止,异常终止。
__kernel_vsyscall中的#0 0x00914410()
设置调试gdb的环境。
未定义函数“internal_error”。
使断点在将来共享库加载时挂起? (是或[n])[回答N;输入不是来自终端]
未定义功能“info_command”。
使断点在将来共享库加载时挂起吗? (是或[n])[回答N;输入不是来自终端]
.gdbinit:8:源命令文件中的错误:
需要参数(一个或多个断点编号)。
(gdb)bt
__kernel_vsyscall中的#0 0x00914410()
符号读取期间,CFI数据不完整;未指定的寄存器(例如eax)位于0x914411。
__unified_syscall中的#1 0x0804d7f4()
#2 0xbf8966c0 in ?? ()
#3
#4 0x2054454e in ?? ()
#5 0x20524c43 in ?? ()
#6 0x2e352e33 in ?? ()
#7 0x32373033 in ?? ()
#8 0x2e203b39 in ?? ()
#9 0x2054454e in ?? ()
#10 0x20524c43 in ?? ()
#11 0x2e302e33 in ?? ()
#12 0x32373033 in ?? ()
#13 0x4d203b39 in ?? ()
#14 0x61696465 in ?? ()
#15 0x6e654320 in ?? ()
#16 0x20726574 in ?? ()
#17 0x36204350 in ?? ()
#18 0x203b302e in ?? ()
#19 0x54454e2e in ?? ()
#20 0x43302e34 in ?? ()
#21 0x00000029 in ?? ()
#22 0xbf8989a8 in ?? ()
回溯停止:该帧内部的前一帧(损坏的堆栈?)
(gdb)bt已满
__kernel_vsyscall中的#0 0x00914410()
没有可用的符号表信息。
__unified_syscall中的#1 0x0804d7f4()
没有可用的符号表信息。
#2 0xbf8966c0 in ?? ()
没有可用的符号表信息。
#3
没有可用的符号表信息。
#4 0x2054454e in ?? ()
没有可用的符号表信息。
#5 0x20524c43 in ?? ()
没有可用的符号表信息。
#6 0x2e352e33 in ?? ()
没有可用的符号表信息。
#7 0x32373033 in ?? ()
没有可用的符号表信息。
#8 0x2e203b39 in ?? ()
没有可用的符号表信息。
#9 0x2054454e in ?? ()
没有可用的符号表信息。
#10 0x20524c43 in ?? ()
没有可用的符号表信息。
#11 0x2e302e33 in ?? ()
没有可用的符号表信息。
#12 0x32373033 in ?? ()
没有可用的符号表信息。
#13 0x4d203b39 in ?? ()
没有可用的符号表信息。
#14 0x61696465 in ?? ()
没有可用的符号表信息。
#15 0x6e654320 in ?? ()
没有可用的符号表信息。
#16 0x20726574 in ?? ()
没有可用的符号表信息。
#17 0x36204350 in ?? ()
没有可用的符号表信息。
#18 0x203b302e in ?? ()
没有可用的符号表信息。
#19 0x54454e2e in ?? ()
没有可用的符号表信息。
#20 0x43302e34 in ?? ()
没有可用的符号表信息。
#21 0x00000029 in ?? ()
没有可用的符号表信息。
#22 0xbf8989a8 in ?? ()
没有可用的符号表信息。
回溯停止:该帧内部的前一帧(损坏的堆栈?)
(gdb)退出
最佳答案
这是堆栈溢出。
#4 0x2054454e in ?? ()
看起来像是文字“TEN”或“NET”
#5 0x20524c43 in ?? ()
“RLC”或“CLR”
等等。
像对待文本一样对待地址-查看是否可以确定该文本覆盖堆栈的位置。
关于c - gdb怪异的回溯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5290257/