在 Linux 系统中,默认情况下,核心转储文件(core dump)会生成在当前工作目录下。为了将核心转储文件生成在指定路径下,可以通过以下方法进行配置。
1. 设置核心转储文件路径
Linux 系统提供了两种方式来指定核心转储文件的生成路径:
- 通过
/proc/sys/kernel/core_pattern
文件:定义核心转储文件的命名规则和存储路径。 - 通过
ulimit
命令:设置核心转储文件的大小限制。
2. 方法一:修改 /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern
文件定义了核心转储文件的命名规则和存储路径。可以通过修改该文件来指定生成路径。
(1)查看当前配置
cat /proc/sys/kernel/core_pattern
默认输出可能是:
core
表示核心转储文件会生成在当前工作目录下,文件名为 core
。
(2)修改配置
编辑 /proc/sys/kernel/core_pattern
文件,指定核心转储文件的路径和命名规则。例如:
echo "/var/coredump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
/var/coredump/
:指定核心转储文件的存储路径。core-%e-%p-%t
:定义核心转储文件的命名规则:%e
:可执行文件名。%p
:进程 ID。%t
:时间戳。
(3)创建目标目录
确保目标目录存在并具有写权限:
sudo mkdir -p /var/coredump
sudo chmod 777 /var/coredump
(4)永久生效
修改 /proc/sys/kernel/core_pattern
是临时生效的,重启后会恢复默认配置。为了永久生效,可以将配置写入 /etc/sysctl.conf
文件:
echo "kernel.core_pattern=/var/coredump/core-%e-%p-%t" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 方法二:设置 ulimit
ulimit
命令用于设置核心转储文件的大小限制。如果未设置或限制过小,核心转储文件可能无法生成。
(1)查看当前限制
ulimit -c
- 如果输出为
0
,表示核心转储文件生成被禁用。 - 如果输出为
unlimited
,表示没有大小限制。
(2)设置核心转储文件大小限制
将核心转储文件大小限制设置为 unlimited
:
ulimit -c unlimited
(3)永久生效
将以下内容添加到 /etc/security/limits.conf
文件中:
* soft core unlimited
* hard core unlimited
4. 验证配置
(1)触发核心转储
运行一个测试程序并触发核心转储。例如:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = NULL;
*ptr = 10; // 触发段错误
return 0;
}
编译并运行:
gcc -o test test.c
./test
(2)检查核心转储文件
在指定的路径下检查是否生成了核心转储文件:
ls /var/coredump
输出示例:
core-test-12345-1698765432
5. 总结
- 修改
/proc/sys/kernel/core_pattern
:指定核心转储文件的路径和命名规则。 - 设置
ulimit
:确保核心转储文件的大小限制足够。 - 永久生效:将配置写入
/etc/sysctl.conf
和/etc/security/limits.conf
。
通过以上方法,你可以将核心转储文件生成在指定路径下,便于管理和调试。