Linux开启coredump

在Linux系统中,C/C++程序崩溃是常见的问题之一。Coredump是指当一个程序崩溃时,系统把程序运行时的内存数据以二进制文件的形式保存下来,以便程序开发者进行崩溃分析。本文将介绍如何开启并配置Coredump

1、查看并配置coredump

在Linux系统中,默认情况下是不会生成Coredump文件的。需要手动开启并配置

1.1 状态查看

使用ulimit命令检查系统Coredump配置(默认情况下,Coredump是被关闭的)

ulimit -a

若输出结果中的"core file size"为"0",则表示Coredump被关闭。

修改系统Coredump配置

ulimit -c unlimited

这条命令会将Coredump文件大小设置为无限制。修改完成后,使用ulimit命令再次检查Coredump配置,确认修改成功。如果希望设置一个特定的大小限制,可以将unlimited替换为所需的大小,单位为blocks(块),通常是512字节。例如,ulimit -c 1024将限制core dump文件的大小为1024 blocks,即512KB。
在这里插入图片描述

1.2 配置

开启coredump的shell脚本, dump路径为当前目录下的crashdump目录中

#!/bin/bashDUMP_PATH=`pwd`/crashdump# 检查当前用户是否具有sudo权限
if [ "$(id -u)" != "0" ]; thenecho "请使用sudo运行此脚本"exit 1
fi# 配置Coredump
echo 2 > /proc/sys/fs/suid_dumpable
echo "$DUMP_PATH/%e.%p.%t.coredump" > /proc/sys/kernel/core_pattern# 创建Coredump保存目录
mkdir -p $DUMP_PATH
chmod 777 $DUMP_PATH# Coredump功能已开启 配置信息
cat /proc/sys/fs/suid_dumpable
cat /proc/sys/kernel/core_pattern
  • /proc/sys/fs/suid_dumpable: 这个节点用于控制setuid程序的Coredump生成行为。它有以下取值:
  • 0:禁止setuid程序生成Coredump文件;
  • 1:只允许root用户获取setuid程序的Coredump文件;
  • 2:允许任何用户获取setuid程序的Coredump文件。

可在root权限下手动执行上面的命令, 或使用sudo权限如:

sudo bash -c 'echo 2 > /proc/sys/fs/suid_dumpable'
  • /proc/sys/kernel/core_pattern:这节点用于指定Coredump文件的保存路径和文件名格式。它的取值可以是一个文件路径,也可以是一个字符串模板。当Coredump文件生成时,系统会根据这个配置项指定的路径和模板生成Coredump文件。

在模板中,可以使用以下占位符:

  • %e:可执行文件名
  • %p:进程ID
  • %u:当前用户ID
  • %g:当前用户组ID
  • %s:生成Coredump文件时的信号
  • %t:生成Coredump文件时的时间戳
  • %h:主机名

注意: 可以用cat查看节点状态如: cat /proc/sys/fs/suid_dumpable

1.3 Coredump配置永久生效

修改/etc/sysctl.conf文件

fs.suid_dumpable = 1
kernel.core_pattern = /tmp/core-%e.%p.%t
  • fs.suid_dumpable:同上
  • kernel.core_pattern: 同上

修改完成后,更新配置(生效)

sysctl -p
  • 注: /etc/sysctl.conf是一个在Linux系统中用于配置内核参数的配置文件。它包含了一系列键值对,用于设置内核参数的值,以优化系统性能和安全性。
    在Linux系统中,如果一个setuid程序崩溃并生成了Coredump文件,那么这个Coredump文件将包含setuid权限执行时的内存数据,这个数据可能包含敏感信息。因此默认情况下,Linux系统不会为setuid程序生成Coredump文件。将fs.suid_dumpable设置为2,则表示可以为setuid程序生成Coredump文件并保存内存数据,这可能会带来安全风险,需要在使用时仔细评估风险和利益。

修改/etc/security/limits.conf 文件

允许系统中的所有用户生成无限制大小的coredump文件, 对于某些操作系统或发行版,可能具有不同的文件名或位置以及格式

* soft core unlimited
* hard core unlimited

2、示例crash程序

为了演示Coredump文件的分析过程,我们创建一个简单的C++程序。代码如下:

void test(int *ptr) {*ptr = 6;}int main() {int *ptr = nullptr;// 是不小心, 还是故意的?test(ptr);return 0;
}

这个程序会在运行时出现段错误,导致程序崩溃。

3、获取coredump并使用GDB分析

运行上述程序,可以看到程序崩溃并输出了一条错误信息

Segmentation fault (core dumped)

这条信息表明程序出现了段错误,并生成了Coredump文件(路径为文章开始配置的路径)。Coredump文件的路径和文件名可以在上面的kernel.core_pattern中指定, 或查看文件节点/proc/sys/kernel/core_pattern。

现在,我们需要使用GDB来分析Coredump文件。执行以下命令:

gdb <program_name> <core_dump_file>

执行以上命令后,GDB会打开并加载Coredump文件。可以使用bt命令查看崩溃时的函数调用栈,使用info命令查看变量值,以及使用其他GDB命令进行更深入的分析

4、分析的基本技巧

在进行Coredump分析时,以下是一些基本的技巧:

  • 查看函数调用栈: 使用bt命令可以查看崩溃时的函数调用栈,找到出错的函数。
  • 查看变量值: 使用info命令可以查看 寄存器值等,找到出错的变量。
  • 使用GDB命令进行更深入的分析: GDB提供了很多命令,比如p(打印变量值)、x(查看内存)、watch(设置变量监视器)等,可以帮助开发者进行更深入的分析。熟练掌握这些命令可以提高分析效率。
  • 使用符号表: 如果程序是使用编译器编译的,那么可以使用符号表来查看函数名、变量名等信息。使用以下命令生成符号表:
g++ -g <program_name>.cpp -o <program_name>

其中,-g选项表示生成符号表。生成符号表后,可以在GDB中查看函数名、变量名等信息。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3266695.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

html+css前端作业 王者荣耀官网1个页面(带报告)

htmlcss前端作业 王者荣耀官网1个页面&#xff08;带报告&#xff09; 下载地址 https://download.csdn.net/download/qq_42431718/89575045 目录1 目录2 项目视频 王者荣耀首页1个页面&#xff08;无js&#xff09; 页面1

Android statsd 埋点简析

源码基于&#xff1a;Android U 0. 前言 最近在研究 Android 自带的系统数据指标采集功能&#xff0c;框架依旧很严谨、完美&#xff0c;这里做个分享。 1. Android S 之后变化 stats 的代码从 framework 或 system/core 中转移到了 packages/modules/StatsD 目录中。 2. 框架…

基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 粒子群优化算法&#xff08;PSO&#xff09; 4.2 分组卷积神经网络&#xff08;GroupCNN&#xff09; 4.3 PSO优化GroupCNN 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行…

算法第十五天:leetcode19.删除链表的倒数第N个节点

一、删除链表的倒数第N个节点的题目描述与链接 19.删除链表的倒数第N个节点的链接如下表所示&#xff0c;您可直接复制下面网址进入力扣学习&#xff0c;在观看下面的内容之前您一定要先做一遍哦&#xff0c;以便让我印象更深刻&#xff01;&#xff01;!https://leetcode.cn/p…

stm32串口通信协议(标准库 and HAL库)

刚入门32&#xff0c;接触的第一个通信协议就是串口通信&#xff0c;所谓通信协议&#xff0c;就是指两个设备之间互联&#xff0c;将两个设备关联起来&#xff0c;使其可以相互之间传输数据&#xff0c;利用串口通信最常见的例子就是蓝牙模块。 下面为学习串口之后的一些简单…

快速入门了解Ajax

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Ajax的初识 意义&#xff1a;AJAX&#xff08;Asynchronous JavaScript and…

相关性模型-正态分布均值假设检验★★★

该博客为个人学习清风建模的学习笔记&#xff0c;部分课程可以在B站&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 1双侧检验 2单侧检验 3t检验 4两个正态总体均值差的检验 5逐对比较法 …

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 首先我们打开页面&#xff0c;准备搭建项目的初始准备 1.New Project 2.随后点击Next&#xff0c;勾…

【C++经典面试题】字符串类String的接口代码实现(重点考察对浅拷贝与深拷贝的理解)

在C++程序中会频繁地使用到字符串,很多信息是作为字符串保存在内存中的。字符串类是C++程序中常用的类之一,比如MFC中的CString类、C++标准库中的string(ANSI窄字节版本)和wstring(UNICODE宽字节版本)类。 C++程序员在面试时时常会遇到字符串相关的问题,比如一个…

Python酷库之旅-第三方库Pandas(046)

目录 一、用法精讲 161、pandas.Series.cumsum方法 161-1、语法 161-2、参数 161-3、功能 161-4、返回值 161-5、说明 161-6、用法 161-6-1、数据准备 161-6-2、代码示例 161-6-3、结果输出 162、pandas.Series.describe方法 162-1、语法 162-2、参数 162-3、功…

visual studio 配置路径中 用户宏的修改(备忘)

visual studio 2013 开发工具界面中&#xff1a;视图 --> 其它窗口 --> 属性管理器 &#xff08;如下图&#xff09; 接着开发工具界面会显示出“属性管理器”的界面 &#xff08;如下图&#xff09; 在‘属性管理器’界面中&#xff0c;找到‘opencv’右击&#xff…

ctfshow-web入门-php特性(web132-web136)

目录 1、web132 2、web133 3、web134 4、web135 5、web136 1、web132 存在 robots.txt 访问 /admin 需要传三个参数&#xff0c;并且需要满足&#xff1a; if($code mt_rand(1,0x36D) && $password $flag || $username "admin"){if($code admin){ech…

shell-awk文本处理工具

1、awk概述 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件 在 linux 上常用的是 gawk,awk …

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多&#xff0c;所以一定是html包python最优&#xff01;于是引出今天的模板。 大体分为三个步骤&#xff1a;…

CPU350% JVM GC频繁并GC不掉EXCEL导出

背景&#xff1a; 有个Excel导出的需求&#xff0c;测试的时候&#xff0c;只要连续导出大量的数据就会导致FAT机器反请求反应迟钝&#xff0c;甚至卡死&#xff0c;无法恢复。 排查&#xff1a; 1 跳板机跳到机器上&#xff0c;查看 项目 ipd 执行ps -ef | grep 项目名称.j…

解决学生技能短板:泰迪智能科技2024年中职大数据实验室,全面提升学生实践能力

一、中职院校现状及实验室建设背景 在当今信息化时代&#xff0c;大数据技术已成为国家战略发展的重要方向。中职院校作为我国职业教育体系的重要组成部分&#xff0c;肩负着培养高素质技术技能人才的重任。然而&#xff0c;目前我国中职院校在大数据教育方面存在以下问题&…

Django Web开发:构建强大RBAC权限管理系统的实战指南

文章目录 前言一、rbac 基于角色的权限管理1.acl 基于用户的权限管理2.rbac 基于角色的权限管理 二、应用示例1.配置角色资源a.分析表b.核心逻辑c.使用transfer在前端实现资源配置d.页面效果 2.登录时获取对应权限a.员工登录b.中间件c.前端请求d.效果图 3.前端-路由守卫-页面权…

鸿蒙HarmonyOS开发:如何灵活运用动画效果提升用户体验

文章目录 一、动画概述1、动画的目的 二、显式动画 (animateTo)1、接口2、参数3、AnimateParam对象说明4、示例5、效果 三、属性动画 (animation)1、接口2、参数3、AnimateParam对象说明4、系统可动画属性4、示例5、效果 一、动画概述 动画的原理是在一个时间段内&#xff0c;…

IDEA缓存和索引

IDEA缓存和索引 —2020年06月10日 IntelliJ IDEA首次加载项目的时候。都会创建索引&#xff0c;而创建索引的时间根项目的文件多少成正比。 IntelliJ IDEA的缓存和索引主要是用来加快文件查询&#xff0c;从而加快各种查找、代码提示等操作的速度。 某些特殊情况下&#xf…