如何分析触发Signal 6(Aborted)的Core Dump文件?
解读GDB Core Dump输出并定位崩溃原因
问题背景
尝试用GDB分析Core Dump文件,仅看到Program terminated with signal 6, Aborted.,无法定位根本原因,执行bt/where/thread命令得到如下输出:
[New LWP 28817] [New LWP 28812] [New LWP 28814] [New LWP 28816] [New LWP 28813] [New LWP 28810] [New LWP 28815] **Program terminated with signal 6, Aborted. #0 0x00007f19e05ae2c7 in ?? ()** Program terminated with signal 6, Aborted. #0 0x00007f19e05ae2c7 in ?? () "/data/coredumps/eea-amgr-xxxxxxxxxxxx-28810-6-1713991244" is a core file. Please specify an executable to debug. (gdb) where #0 0x00007f19e05ae2c7 in ?? () #1 0x00007f19e05af9b8 in ?? () #2 0x0000000000000020 in ?? () #3 0x0000000000000000 in ?? () (gdb) bt #0 0x00007f19e05ae2c7 in ?? () #1 0x00007f19e05af9b8 in ?? () #2 0x0000000000000020 in ?? () #3 0x0000000000000000 in ?? () (gdb) thread [Current thread is 1 (LWP 28817)]
输出解读与解决步骤
1. 当前输出的核心问题:缺少可执行文件与调试符号
GDB提示Please specify an executable to debug.,说明你只加载了Core Dump,没加载生成该Core Dump的对应版本可执行文件。没有可执行文件的符号表,GDB无法将内存地址解析为函数名、文件名等信息,所以调用栈里全是??(未知符号)。
2. 先加载匹配的可执行文件
启动GDB时同时指定可执行文件和Core Dump:
gdb /path/to/your/eea-amgr-executable /data/coredumps/eea-amgr-xxxxxxxxxxxx-28810-6-1713991244
注意:必须使用与生成Core Dump完全一致的可执行文件——包括编译版本、编译参数(尤其是是否带-g调试符号),否则符号解析仍会失败。
3. Signal 6(SIGABRT)的含义
Signal 6是SIGABRT,触发场景通常有:
- 程序主动调用
abort()函数(比如断言assert()失败时,默认会调用abort()) - 内存分配失败后,程序主动终止
- 系统或其他进程向目标进程发送
SIGABRT信号
4. 正确解读调用栈与线程信息
[New LWP xxx]:表示Core Dump包含多个线程(LWP是轻量级进程,对应线程)- 当前线程是
LWP 28817,但崩溃可能发生在其他线程,执行以下命令查看所有线程的调用栈:thread apply all bt - 加载可执行文件后,用
bt full查看完整调用栈,包含函数参数、局部变量,能更精准定位崩溃点。
5. 后续定位方向
- 如果调用栈里出现
assert()相关函数,查看断言条件即可知道触发原因 - 如果是内存问题(比如越界、空指针),调用栈会显示崩溃时执行的业务函数,结合代码排查内存操作
- 若可执行文件无调试符号,需重新编译带
-g参数的版本,或获取对应版本的调试符号包
内容的提问来源于stack exchange,提问作者Sirius Black 11
相关产品推荐
相关产品推荐

