深入Linux Core文件生成与自定义命名规则

简介: 深入Linux Core文件生成与自定义命名规则

inux 作为广泛使用的运行平台,在程序运行崩溃时能及时记录 错误信息,是很方便的查询问题的方式,这里对怎么使用 Linux下的 错误信息记录 core文件,进行总结介绍。

引言

Linux系统开发中,当程序发生崩溃时,生成的core文件对于开发者来说是一个宝贵的资源。它记录了程序崩溃时的内存映像和寄存器状态,是调试程序的关键。本文将深入探讨如何在Linux系统下生成core文件,并自定义其命名和存储规则。

编译时添加 -g 指令

编译器选项

在编译程序时,使用 -g 选项可以保留调试信息。这对于生成core文件至关重要,因为调试信息允许调试器(如gdb)正确地解释core文件中的数据。

Makefile 示例

以下是一个包含 -g 选项的Makefile示例:

CC=gcc
CFLAGS=-g -Wall -O0 # 添加-g以包含调试信息,-O0禁用优化
TARGET=my_program

all: $(TARGET)

$(TARGET): main.o utils.o
  $(CC) $(CFLAGS) -o $@ $^

main.o: main.c
  $(CC) $(CFLAGS) -c $<

utils.o: utils.c
  $(CC) $(CFLAGS) -c $<

CMakeLists.txt 示例

在使用CMake构建系统时,可以在CMakeLists.txt文件中设置编译选项:

cmake_minimum_required(VERSION 3.10)
project(MyProgram)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(MyProgram main.cpp utils.cpp)
target_compile_options(MyProgram PRIVATE -g -O0) # 添加-g和-O0

ulimit 设置启用 core 文件记录

ulimit 是一个用来控制shell启动进程的资源限制的工具。要启用core文件的生成,可以使用以下命令:

ulimit -c unlimited

ulimit 设置启用 core 文件记录

ulimit 是一个用来控制shell启动进程的资源限制的工具。要启用core文件的生成,可以使用以下命令:

ulimit -c unlimited


ulimit 设置启用 core 文件记录

ulimit 是一个用来控制shell启动进程的资源限制的工具。要启用core文件的生成,可以使用以下命令:

ulimit -c unlimited

要临时设置core文件的生成规则,可以使用以下命令:

sysctl -w kernel.core_pattern="/core_dumps/core_%e_%p_%t"

这将把core文件存储到/core_dumps目录下,文件名包含程序名、进程ID和时间戳。

永久设置示例

为了永久设置core文件的命名规则,需要编辑/etc/sysctl.conf文件,并添加或修改以下行:

kernel.core_pattern = /core_dumps/core_%e_%p_%t

修改后,运行以下命令来应用更改:

sysctl -p /etc/sysctl.conf

其他 sysctl 参数

除了kernel.core_pattern,还有一些其他的sysctl参数可以控制core文件的行为:

  • fs.inotify.max_user_watches:设置用户可以监视的文件数量的最大值。
  • kernel.core_uses_pid:设置是否在core文件名中包含进程ID。

调试崩溃程序

一旦core文件生成,可以使用gdb调试器来分析:

gdb /path/to/program /path/to/core

结论

通过本文的介绍,你应该对如何在Linux系统下生成和自定义core文件有了更深入的理解。正确地设置编译选项和系统参数,可以大大简化程序崩溃后的调试过程。记得在生产环境中谨慎使用,以避免潜在的安全风险和性能问题。

扩展阅读

  • 深入理解Linux内核
  • gdb用户手册
  • CMake文档

分享一个有趣的 学习链接

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
3天前
|
安全 Linux
Linux通配符及其在文件搜索和管理中的应用
Linux通配符及其在文件搜索和管理中的应用
|
2天前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
|
2天前
|
存储 Linux
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
Linux文件的上和下,FinalShell文件右键可下文件,先选择root文件夹,然后把他文件往里面拖动,就可以下载了,命令下载,ls -l可以看当前文件目录,sz 文件名可下载,tab补,rz出上
|
2天前
|
Linux 数据安全/隐私保护 iOS开发
Linux的root用户,普通用户无法在根录中创建文件,一般在其HOME目录里是不受限的,一旦出了HOME目录,大多数地方,仅有读和执行的权限,ctrl + d回到上一个用户,Exit,su - ro
Linux的root用户,普通用户无法在根录中创建文件,一般在其HOME目录里是不受限的,一旦出了HOME目录,大多数地方,仅有读和执行的权限,ctrl + d回到上一个用户,Exit,su - ro
Linux07特殊路径符,向上回退一级,cd ..切换目录到 /home/itheima,怎样做 .表示当前目录,cd ./Desktop,切换到当前目录的Desktop文件,cd ../... 退
Linux07特殊路径符,向上回退一级,cd ..切换目录到 /home/itheima,怎样做 .表示当前目录,cd ./Desktop,切换到当前目录的Desktop文件,cd ../... 退
|
2天前
|
Linux
Linux部署06 ---相对路径绝对路径,想要切换到home下的文件 cd /home/itheima/Desktop cd Desktop,相对路径以当前目录为起点一种写法 不写/,相对是当前目录
Linux部署06 ---相对路径绝对路径,想要切换到home下的文件 cd /home/itheima/Desktop cd Desktop,相对路径以当前目录为起点一种写法 不写/,相对是当前目录
|
2天前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
2月前
|
Linux
百度搜索:蓝易云【Linux中如何对文件进行压缩和解压缩?】
这些是在Linux中进行文件压缩和解压缩的常见方法。根据您的需求和具体情况,可能会使用其他压缩工具和选项。您可以通过查阅相应命令的帮助文档来获取更多详细信息。
62 1
|
2月前
|
NoSQL Java Linux
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
|
2月前
|
算法 Java Linux
Linux下文件增删改查定位压缩操作与权限所属用户
Linux下文件增删改查定位压缩操作与权限所属用户
51 0