ubuntu 应用程序出现coredump 生成的core文件默认在哪以及如何修改路径为程序运行目录
0、问题由来
ubuntu 上运行一个程序提示core dump ,但是当前目录中并没有core 文件不方便gdb调试。
1、core文件的默认路径
查看自己Ubuntu的支持的模式
root@blj:/# cat /proc/sys/kernel/core_pattern |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -F%F -- %E
Ubuntu 系统启用了 Apport 错误报告服务(注意开头的管道符
|)。这意味着当程序崩溃时,Core Dump 文件不会直接以传统方式生成在运行目录下,而是通过管道传递给 /usr/share/apport/apport 脚本进行统一拦截和处理。在这种机制下,你的 Core Dump 文件默认存储路径是:
/var/lib/apport/coredump/root@blj:/var/lib/apport/coredump# ls core._test.0.cd826f58-4a28-49aa-b44f-9a5e94d8042f.33272.14706961
3、修改路径
以下脚本即可实现
#!/bin/bash ulimit -c unlimited #临时方案-先关闭apport服务 service apport stop #如需永久禁用,可执行 sudo systemctl disable apport.service
#重新指定路径 echo "corecore-%e-%p-%t" > /proc/sys/kernel/core_pattern
#参数说明:%e代表程序名称,%p代表进程 PID,%t代表崩溃时间戳 ./test
测试程序
#include <stdio.h> int main() { int *p = NULL; *p = 0; // 这会触发段错误 return 0; }
gcc -g -o test test.c # 添加 -g 选项以包含调试信息,这对分析至关重要
gdb 调试
gdb [可执行文件] [core文件] 示例: gdb ./your_program core.12345 分析Core文件: 查看调用栈: (gdb) bt 查看具体线程信息: (gdb) thread apply all bt 退出GDB: 输入 quit 或 q。 注意事项:确保程序编译时使用了调试信息(如 -g 参数)。 如果依赖动态库,需设置库路径: (gdb) set solib-search-path /path/to/libs
# 如果有多个动态库,指定库路径
gdb -ex "set solib-search-path /path/to/libs" <可执行文件> <core文件>
浙公网安备 33010602011771号