深入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
目录
相关文章
|
1天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
10 2
|
3天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
15 2
|
7天前
|
Linux 数据库
linux 全局搜索文件
在 Linux 系统中,全局搜索文件常用 `find`、`locate` 和 `grep` 命令。`find` 根据文件名、类型、大小、时间戳等条件搜索;`locate` 通过预构建的数据库快速查找文件;`grep` 在文件中搜索特定文本,常与 `find` 结合使用。选择合适的命令取决于具体需求。
|
11天前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
27 4
|
9天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
55 1
|
Linux
Linux命名空间学习教程(五)NET
本文讲的是Linux命名空间学习教程(五)NET,【编者的话】Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid、net、ipc、mnt、uts 等命名空间将容器的进程、网络、消息、文件系统和hostname 隔离开。
1692 0
|
12天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
104 5
|
12天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
48 4
|
3天前
|
Linux Shell 数据安全/隐私保护
|
3天前
|
域名解析 网络协议 安全