记录一次Linux环境下遇到“段错误核心已转储”然后利用core文件解决问题的过程

news2024/9/29 15:22:35

参考Linux 下Coredump分析与配置

在做项目的时候,很容易遇到“段错误(核心已转储)”的问题。如果是语法错误还可以很快排查出来问题,但是碰到coredump就没办法直接找到问题,可以通过设置core文件来查找问题,直接定位到出问题的行号,十分方便。

什么是coredump

Core是内存的意思,当程序运行过程中检测到异常程序异常退出的时候,系统就会把程序当前的内存状况存储在一个core文件中,叫做coredumoed也就是信息转储,操作系统检测到当前进程异常时将通过信号的方式通知目标进程相应的错误信息比如我遇到的问题就是SIGSEGV信号(进程进行了一次无效的内存引用,不正确的内存处理)

配置core

  1. 在跟目录下面建立一个储存coredump文件的文件夹(最好是在根目录下面,不然有可能之后会有权限不够的问题)
mkdir /corefile
  1. 设置产生coredump文件的大小
  • 首先使用ulimit -a查看,core file是0的话这个时候就没有办法写core文件,所以要先设置大小
  • 早corefile文件中输入ulimit -c unlimited,设置大小之后最好不要关闭当前窗口,不然打开新窗口的时候core文件大小可能又变成0了
  • 执行以下两条命令:
echo "1" > /proc/sys/kernel/core_uses_pid //将1写入到该文件里
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  • 修改配置文件
vim /etc/profile

添加ulimit -S -c unlimited > /dev/null 2>&1
执行命令使其生效

source /etc/profile
  • 机器重启的时候清空corefile
    因为coredump文件很大会占用硬盘,所以在配置文件/etc/rc.local中最后面添加命令rm -rf /corefile/*,机器重启的时候清空这个文件夹
  • 再执行以下两条命令
 echo "1" > /proc/sys/kernel/core_uses_pid 
 echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

测试

  • 在编译程序或者项目的时候,一定要加上-g,不然之后通过gdb查看问题的时候不会显示出错的地方的行号
  • 运行程序,出现“段错误核心已转储”,然后去corefile文件,命令行输入ll,出现如下结果
    在这里插入图片描述
  • 运行gdb阅读core文件
gdb 程序路径 对应的coredump文件
  • 如果命令输入不正确就会显示如下图
    gdb运行的时候没有输入这个程序路径:
    在这里插入图片描述
    编译的时候没有加参数-g:
    在这里插入图片描述
  • gdb运行成功:会显示出问题的行号,通过bt或者where看到函数调用栈情况

经过问题排查,发现我是因为错误使用内存,所以编写代码的时候要注意细节,如果出现问题要擅长通过gdb调试、core文件排查、解决问题。

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

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

相关文章

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[一]

文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能01-搭建Vue 前端工程需求分析/图解代码实现搭建Vue 前端工程下载node.js LTS 并安装: node.js 的npm创建Vue 项目使用idea 打开ssm_vue 项目, 并配置项目启动 Vue3 项目目录结构梳理Vue3 项目结构介绍 配置Vue 服务端口El…

本地 shell无法连接centos 7 ?

1、首先检查是否安装ssh服务; yum list installed | grep openssh-server# 没有安装尝试安装下 yum install openssh-server 2、检查ssh服务是否开启 systemctl status sshd.service# 未开启,开启下 systemctl start sshd.service # 将sshd 服务添…

router 跳转打开新窗口

let url router.resolve({name: screen, })?.hrefwindow.open(url, _black)注意:新窗口无法全屏 参考链接:https://stackoverflow.com/questions/29281986/run-a-website-in-fullscreen-mode/30970886#30970886

路由表、转发表

文章目录 1.路由表1.1.查询路由表的开销 2.转发表3.两个表的关系3.1.联系3.2.区别 4.误区5.区分二表的好处之实例6.Linux中通过NAT原理配置转发表7.优势8、转发表与MAC表9、IP VS MAC 1.路由表 路由信息最终要存储在用于路由器的主机或者专业路由器上,存放这些信息…

【单片机】51单片机串口的收发实验,串口程序

这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数…

基于web特产店销售管理系统的设计与实现(论文+源码)_kaic

摘要 农业是我国国民经济的重要组成部分,随着信息化的普及,4G网络、光纤以及5G网络也日益完善,农业信息化的发展成为了必然。同时,由于本年疫情原因,导致农作物积压销售,甚至腐烂造成不必要的浪费&#xff…

k8s ingress获取客户端客户端真实IP

背景 在Kubernetes中,获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中,原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点: 安全性:基于客户端IP进行访问控制和认证授…

Java阶段五Day20

Java阶段五Day20 文章目录 Java阶段五Day20项目推进完成订单OrderServerService && MessageTransSenderRepositoryMessageTransRepoImplLocalTransactionLisetner 结算订单业务流程图远程调用 画时序图 项目推进 完成订单 通过分布式消息事务解决本地事务和发消息的一…

精选5个AI绘画工具,灵感与创意迸发!

伴随着AI技术的发展,AI绘画工具也走进了人们的视线,今天本文将为大家推荐5个最近火爆的AI绘画神器,一起来看看吧! 1、即时灵感 即时灵感是一个国产的AI绘画神器,非常受国内设计师的欢迎。它支持设计师使用中文描述词…

面向视频会议场景的 H.266/VVC 码率控制算法研究

文章目录 面向视频会议场景的 H.266/VVC 码率控制算法研究个人总结摘要为什么要码率控制码率控制的关键会议类视频码率控制研究背景视频会议系统研究现状目前基于 R-λ模型的码率控制算法的问题文章主要两大优化算法优化算法1:基于视频内容相关特征值的码率控制算法…

网安周报|CISA对梭鱼ESG攻击中使用的潜艇后门发出警告

1、CISA对梭鱼ESG攻击中使用的潜艇后门发出警告 美国网络安全与基础设施安全局(CISA)发布了一条针对恶意软件变体的警报,该变体被追踪为SUBMARINE Backdoor,用于利用该漏洞进行攻击 CVE-223-2868在Barracuda电子邮件安全网关&…

斯坦福大学提出在类别层级对多零件多关节三维拼装新方法

来源:投稿 作者:橡皮 编辑:学姐 paper:https://arxiv.org/pdf/2303.06163.pdf 背景: 形状装配通过排列一组简单或基本的零件几何图形来组成复杂的形状几何图形。许多重要的任务和应用都依赖于形状装配算法。 计算机…

redis初级

Redis 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作RedisRedis持久化机制 1. Redis入门 1.1 Redis简介 Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 **官网:**https://redis.io **中文网&…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代,但前端 Web 开发业务仍在快速变化和增长,前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…

直播预告|还在说做不出、改不好地图贴图?一次直播包教包会!

在EasyV中,地图组件通常会作为可视化大屏中的「主视觉」部分,用户通过地图组件的使用,可以极大程度上提高搭建的效率以及视觉效果。正因如此,我们的素材广场中大多模板也将「地图」作为核心部分,以此来方便用户快速套用…

203. 移除链表元素

203. 移除链表元素 题目方法1递归方法2迭代 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 方法1递归 class Solution { public:ListNode* removeElements(ListNode* head, in…

IO进程线程day7(2023.8.4)

一、Xmind整理: 二、课上练习: 练习1:创建两个线程:其中一个线程拷贝前半部分,另一个线程拷贝后半部分。 只允许开一份资源,且用互斥锁方式实现。 提示:找临界区--->找临界资源。 #includ…

关于compose AndroidView更新及生命周期的监听。

有时候需要在compose中使用原生view体系,那么将会用到AndroidView这个控件。 从源码中可以看出有三个参数,factory就是要添加的view控件,在update中对控件进行更新。 以添加地图为例: 对地图进行更新及对生命周期的监听&#xff1…

探索Android应用架构模式:选择适合你的开发之路

探索Android应用架构模式:选择适合你的开发之路 通过这篇文章,读者将能够更好地理解不同的Android应用架构模式,为他们的项目选择最适合的架构模式,并在开发过程中更高效地构建稳健的应用程序。 引言 在今天的移动应用开发领域…

MongoDB 6.0.8 安装配置

一、前言 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 将数据存储为一个文档,数据结构由键值(key>value…