Skip to content

Linux

Linux Core

Linux 的 core 文件(也叫 core dump核心转储)本质上是:进程崩溃那一刻,把它的“现场”保存到磁盘的一份快照,用来事后调试为什么崩了(像“案发现场记录”)。

会包含(取决于配置/权限):

  • 进程的内存映射(栈、堆、全局区、部分匿名映射等)
  • 寄存器现场(崩溃时 CPU 的寄存器值)
  • 线程信息、信号信息(为什么死的:SIGSEGV / SIGABRT…)
  • 进程的映射库列表、路径等元数据

有了它,你就能在另一台机器/另一个时间用调试器还原崩溃点。

通常是进程收到“会导致转储”的信号并终止,例如:

  • SIGSEGV(段错误,访问非法内存)
  • SIGABRT(abort)
  • SIGFPE(除 0、浮点异常)
  • SIGILL(非法指令)
  • SIGBUS(总线错误)
  • 有时 SIGQUIT 也会

路径

cat /proc/sys/kernel/core_pattern

core 是否允许生成

ulimit -c

如何用 core 调试

gdb ./app core.1234
bt            # 打印调用栈(最关键)
bt full       # 更详细(含局部变量,依赖是否有调试符号)
info threads  # 看线程
thread apply all bt  # 所有线程的栈
frame 0       # 切到当前帧
p var         # 打印变量

命令

sed

sed 's/AAA/BBB/g' xyz

s/AAA/BBB/ 是替换命令,g 表示全局替换(即每行中的所有匹配都会替换)。

没有 g,只能替换每行第一个匹配