我的程序是用dietlibc 静态编译的。它在 ubuntu x64 上编译(使用 -m32 标志为 x86 编译)并在 centos x86 上运行。
编译后的大小只有100KB左右。我用 -ggdb3 编译它,没有优化标志。
我的程序使用 signal.h 处理 SIGSEGV 信号,然后调用 abort()。
该程序运行几天没有问题,但有时会出现段错误。这是当我得到我不理解的奇怪回溯时:
用户名@ubuntu:~/Desktop$ gdb -c core.28569 程序名 GNU gdb (GDB) 7.2 版权所有 (C) 2010 Free Software Foundation, Inc. 许可 GPLv3+:GNU GPL 版本 3 或更高版本 这是免费软件:您可以自由更改和重新分发它。 在法律允许的范围内,不提供任何保证。输入“显示复制” 和“显示保修”了解详情。 此 GDB 配置为“--host=x86_64-linux-gnu --target=i386-linux-gnu”。 有关错误报告说明,请参阅: ... 从程序名中读取符号...完成。 [新线程28569] 核心是由“程序名”生成的。 程序以信号 6 终止,Aborted。 #0 0x00914410 在 __kernel_vsyscall () 设置调试 gdb 的环境。 未定义函数“internal_error”。 在未来的共享库加载时使断点挂起?(y or [n]) [回答 N; 输入不是来自终端] 未定义函数“info_command”。 在未来的共享库加载时使断点挂起?(y or [n]) [回答 N; 输入不是来自终端] .gdbinit:8:源命令文件中的错误: 需要参数(一个或多个断点编号)。 (gdb) BT #0 0x00914410 在 __kernel_vsyscall () 符号读取过程中,CFI数据不完整;未指定的寄存器(例如,eax)位于 0x914411。 #1 0x0804d7f4 in __unified_syscall() #2 0xbf8966c0 在?? () #3 #4 0x2054454e 在?? () #5 0x20524c43 在?? () #6 0x2e352e33 在?? () #7 0x32373033 在?? () #8 0x2e203b39 在?? () #9 0x2054454e 在?? () #10 0x20524c43 在?? () #11 0x2e302e33 在?? () #12 0x32373033 在?? () #13 0x4d203b39 在?? () #14 0x61696465 在?? () #15 0x6e654320 在?? () #16 0x20726574 在?? () #17 0x36204350 在?? () #18 0x203b302e 在?? () #19 0x54454e2e 在 ?? () #20 0x43302e34 在?? () #21 0x00000029 在?? () #22 0xbf8989a8 在?? () 回溯停止:此帧内部的前一帧(损坏的堆栈?) (gdb) bt 已满 #0 0x00914410 在 __kernel_vsyscall () 没有可用的符号表信息。 #1 0x0804d7f4 in __unified_syscall() 没有可用的符号表信息。 #2 0xbf8966c0 在?? () 没有可用的符号表信息。 #3 没有可用的符号表信息。 #4 0x2054454e 在?? () 没有可用的符号表信息。 #5 0x20524c43 在?? () 没有可用的符号表信息。 #6 0x2e352e33 在?? () 没有可用的符号表信息。 #7 0x32373033 在?? () 没有可用的符号表信息。 #8 0x2e203b39 在?? () 没有可用的符号表信息。 #9 0x2054454e 在?? () 没有可用的符号表信息。 #10 0x20524c43 在?? () 没有可用的符号表信息。 #11 0x2e302e33 在?? () 没有可用的符号表信息。 #12 0x32373033 在?? () 没有可用的符号表信息。 #13 0x4d203b39 在?? () 没有可用的符号表信息。 #14 0x61696465 在?? () 没有可用的符号表信息。 #15 0x6e654320 在?? () 没有可用的符号表信息。 #16 0x20726574 在?? () 没有可用的符号表信息。 #17 0x36204350 在?? () 没有可用的符号表信息。 #18 0x203b302e 在?? () 没有可用的符号表信息。 #19 0x54454e2e 在 ?? () 没有可用的符号表信息。 #20 0x43302e34 在?? () 没有可用的符号表信息。 #21 0x00000029 在?? () 没有可用的符号表信息。 #22 0xbf8989a8 在?? () 没有可用的符号表信息。 回溯停止:此帧内部的前一帧(损坏的堆栈?) (gdb) 退出