在 Linux 系统中,当程序崩溃时,系统可以生成一个 core dump 文件,该文件包含了程序的内存映像,有助于调试和分析崩溃原因。你可以通过配置系统来指定 core dump 文件的生成路径和命名格式。
配置 core dump 文件路径和格式
1. 使用 ulimit 命令
ulimit 命令用于设置 shell 会话中的资源限制。你可以使用它来启用 core dump 文件并指定文件大小限制。
例如,启用 core dump 并设置文件大小为无限制:
ulimit -c unlimited
你可以将这条命令添加到你的 shell 配置文件(如 ~/.bashrc 或 /etc/profile)中,以便在每次登录时自动应用:
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc
2. 配置 /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern 文件用于指定 core dump 文件的生成路径和命名格式。你可以通过编辑这个文件来配置 core dump 文件的位置。
例如,将 core dump 文件保存到 /var/core/ 目录,并以 core-PID 的格式命名:
echo "/var/core/core-%e-%p-%t" | sudo tee /proc/sys/kernel/core_pattern
其中:
- %e 表示可执行文件名
- %p 表示进程 ID
- %t 表示时间戳
你可以使用其他格式说明符来定制文件名,具体说明符可以参考 man 5 core。
3. 持久化配置
为了使配置在系统重启后仍然有效,你需要将配置添加到 /etc/sysctl.conf 文件中:
sudo sh -c 'echo "kernel.core_pattern=/var/core/core-%e-%p-%t" >> /etc/sysctl.conf'
sudo sysctl -p
4. 创建 core dump 目录并设置权限
确保 core dump 文件的目标目录存在,并且具有适当的权限:
sudo mkdir -p /var/core
sudo chmod 777 /var/core
验证配置
你可以通过以下命令验证当前的 core dump 文件配置:
ulimit -c
cat /proc/sys/kernel/core_pattern
确保 ulimit -c 输出 unlimited,并且 /proc/sys/kernel/core_pattern 显示你期望的路径和格式。
示例
假设你希望将 core dump 文件保存到 /var/core/ 目录,并以 core-程序名-进程ID-时间戳 的格式命名,完整的配置步骤如下:
- 启用 core dump 并设置文件大小为无限制:
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc
- 配置 core dump 文件路径和格式:
echo "/var/core/core-%e-%p-%t" | sudo tee /proc/sys/kernel/core_pattern
- 持久化配置:
sudo sh -c 'echo "kernel.core_pattern=/var/core/core-%e-%p-%t" >> /etc/sysctl.conf'
sudo sysctl -p
- 创建 core dump 目录并设置权限:
sudo mkdir -p /var/core
sudo chmod 777 /var/core
通过这些步骤,你可以成功配置 core dump 文件的生成路径和命名格式,并确保配置在系统重启后仍然有效。