介绍:
提示:在linux中,用于分析进程崩溃的核心转储(core dump)
核心转储(Core Dump),在计算机术语中,是指当一个正在运行的程序因某种原因异常终止时(例如遇到无法处理的错误或接收到了特定的信号),操作系统会将该程序在内存中的状态保存到一个文件中,这个文件就是核心转储文件(通常叫做core文件)。核心转储包含程序崩溃时刻的内存映像、寄存器状态、堆栈跟踪等信息,是调试程序崩溃问题的重要工具。
核心转储的主要用途包括:
- 调试:开发人员可以使用诸如GDB(GNU Debugger)这样的调试器加载核心转储文件和相应的可执行文件,来分析程序崩溃前的状态,包括变量值、调用堆栈等,从而定位错误的原因。
- 错误报告:在软件支持和故障排查中,用户可以提供核心转储文件给开发者,帮助他们复现和诊断问题,即使开发者无法直接访问出错的环境。
- 系统监控和分析:在服务器和嵌入式系统中,自动收集核心转储文件对于监控系统稳定性、分析系统故障至关重要。
为了控制核心转储的生成,系统管理员或用户通常需要调整一些配置,比如通过ulimit命令来设定核心文件的最大大小,或者通过修改/proc/sys/kernel/core_pattern来指定核心文件的保存路径和命名规则。在某些情况下,还需要确保可执行文件具有正确的权限,以便能够写入核心文件。
核心转储功能起源于早期的Unix系统,并被后来的各种类Unix系统(包括Linux)所继承和发展。在现代操作系统中,核心转储机制已经成为标准的故障诊断工具之一。
启用/停止:
ulimit -c
#输出结果为0表示禁止生成核心转储,具体数字表示限制大小(单位KB)
ulimit -c 0 #禁止核心转储
ulimit -c unlimited #无限制状态
ulimit -c 10000 #设置特定大小
相关配置:
核心转储文件默认命名为 core,但可以通过 /proc/sys/kernel/core_pattern 配置文件来自定义核心文件的命名规则和存放位置。
echo "/var/crash/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
# %e 是可执行文件名,%p 是进程ID,%t 是时间戳。
# 转储核心文件存放在 /var/crash/. 下
触发核心转储: 当你的程序因某种原因(如段错误)崩溃时,系统会根据上述设置自动生成核心转储文件。
进行调试:
需要使用GDB进行调试。
gdb your_exe core
# gdb 应用程序 转储核心转储文件
提示:使用上述指令进入GDB调试。
调试指令:
- print var 或 p var:打印变量的值。
- whatis var:显示变量类型。
- backtrace或bt:显示当前的函数调用堆栈。
- frame frame_number 或 f frame_number:选择堆栈帧,即进入当前帧文件。
- list 或 l:显示源代码,此处显示所处文件。
- info locals:显示当前堆栈帧中的局部变量。
- quit 或 q:退出GDB。