深入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
目录
相关文章
|
7月前
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
5月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
760 13
|
6月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
201 16
|
7月前
|
Java Linux
自定义linux脚本用于快速jar包启动、停止、重启
自定义linux脚本用于快速jar包启动、停止、重启
334 29
|
7月前
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
229 28
|
6月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
107 4
|
7月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
941 12
|
6月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename &#39;s/2023/2024/&#39; *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
Oracle 关系型数据库 MySQL
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
二、Linux文本处理与文件操作核心命令