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,只能替换每行第一个匹配