0

0

Linux怎么开启核心转储_Linux core dump生成与调试配置【开发】

尼克

尼克

发布时间:2026-01-13 04:55:10

|

768人浏览过

|

来源于php中文网

原创

Linux系统中未生成core dump文件时,需依次检查并配置ulimit限制、/proc/sys/kernel/core_pattern、core_uses_pid与suid_dumpable参数、systemd服务限制,并通过崩溃测试程序验证。

linux怎么开启核心转储_linux core dump生成与调试配置【开发】

如果您在Linux系统中运行程序时发生崩溃,但未生成core dump文件,则可能是由于核心转储功能被禁用或相关配置不正确。以下是开启并正确配置Linux核心转储的步骤:

一、检查并设置ulimit限制

Linux默认可能将core文件大小限制为0,导致崩溃时不生成任何转储文件。需通过ulimit命令临时或永久调整该限制。

1、在当前终端中执行 ulimit -c unlimited,允许生成任意大小的core文件。

2、验证设置是否生效:执行 ulimit -c,输出应为 unlimited 而非 0。

3、若需永久生效,将 ulimit -c unlimited 添加至用户shell配置文件(如 ~/.bashrc 或 ~/.profile)末尾,并执行 source ~/.bashrc

二、配置/proc/sys/kernel/core_pattern

该内核参数决定core文件的命名规则与保存路径。默认情况下core文件可能仅生成为“core”,且位于进程工作目录,易被覆盖或难以定位。

1、查看当前模式:执行 cat /proc/sys/kernel/core_pattern

2、临时设置为带时间戳和PID的格式:执行 echo '/tmp/core.%e.%p.%t' | sudo tee /proc/sys/kernel/core_pattern

3、确保目标目录存在且可写:执行 sudo mkdir -p /tmp/coredumps && sudo chmod 1777 /tmp/coredumps

三、启用kernel.core_uses_pid与kernel.suid_dumpable

这两个内核参数分别控制是否在core文件名中包含PID,以及是否允许对setuid程序生成core dump。部分安全策略会禁用后者,导致特权程序崩溃时不生成转储。

1、启用PID后缀:执行 echo 1 | sudo tee /proc/sys/kernel/core_uses_pid

2、允许setuid程序生成core:执行 echo 2 | sudo tee /proc/sys/kernel/suid_dumpable(值2表示在满足dumpable标志时允许)。

3、验证变更:分别执行 cat /proc/sys/kernel/core_uses_pidcat /proc/sys/kernel/suid_dumpable,确认输出为 12

AI Content Detector
AI Content Detector

Writer推出的AI内容检测工具

下载

四、通过systemd服务配置core dump(适用于systemd系统)

对于由systemd管理的服务,其资源限制独立于用户shell,需通过systemd单位文件显式启用core dump。

1、编辑对应服务的覆盖配置:执行 sudo systemctl edit servicename.service(将servicename替换为实际服务名)。

2、在打开的编辑器中添加以下内容:

[Service]

LimitCORE=infinity

MemoryLimit=infinity

3、重载配置并重启服务:执行 sudo systemctl daemon-reloadsudo systemctl restart servicename.service

五、验证core dump是否正常生成

生成一个故意崩溃的测试程序,用于确认整个配置链路有效。此步骤可快速识别前序配置中是否存在遗漏或冲突。

1、创建测试C文件 crash.c:内容为 int main() { char *p = NULL; return *p; }

2、编译:执行 gcc -g -o crash crash.c

3、运行并触发段错误:执行 ./crash,随后检查 ls -l /tmp/core.* 是否出现新生成的core文件。

4、使用gdb加载验证:执行 gdb ./crash /tmp/core.crash.*,进入后输入 bt 查看回溯信息。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

435

2024.03.01

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

537

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

194

2025.08.29

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1348

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

701

2023.06.29

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.1万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号