Coredump文件分析与调试流程
什么是 coredump?如何配置 Linux 系统生成 coredump(ulimit/sysctl),如何使用 GDB 分析 coredump 文件定位崩溃原因?给出完整流程。
回答
屠龙少年
Coredump:进程崩溃时内存快照,包含堆栈、寄存器、内存数据。
配置生成:
# 查看当前限制
ulimit -c
# 设置不限制大小,仅当前 shell
ulimit -c unlimited
# 持久化配置
# /etc/security/limits.conf 加入:
# * soft core unlimited
# 设置 coredump 路径和命名
# /etc/sysctl.conf:
kernel.core_pattern = /tmp/cores/core.%e.%p.%t
# 生效:sysctl -p
产生 coredump 的信号:SIGSEGV(段错误)、SIGABRT(abort)、SIGBUS、SIGFPE 等。
分析:
gdb ./a.out /tmp/cores/core.a.out.12345.1700000000
GDB 内调试步骤:
bt/backtrace:查看崩溃时的调用栈。frame N:切换到崩溃帧。info locals:查看局部变量。list:查看源代码。p variable:查看变量值。info registers:查看寄存器。up/down:栈帧上下移动。
常见问题:
- 缺少调试符号(strip 后只能看到地址)。
- ASLR 导致不同运行地址不同。
- 需要
debuginfo包(yum install glibc-debuginfo)。