CodeWalk

Coredump文件分析与调试流程

作者:屠龙少年 · 2026-05-30 12:55

什么是 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 内调试步骤

  1. bt / backtrace:查看崩溃时的调用栈。
  2. frame N:切换到崩溃帧。
  3. info locals:查看局部变量。
  4. list:查看源代码。
  5. p variable:查看变量值。
  6. info registers:查看寄存器。
  7. up/down:栈帧上下移动。

常见问题

  • 缺少调试符号(strip 后只能看到地址)。
  • ASLR 导致不同运行地址不同。
  • 需要 debuginfo 包(yum install glibc-debuginfo)。