关于核心转储和GDB调试的理解

Linux应用程序发生Segmentation fault段错误时,如何利用core dump文件定位错误呢?

在 Linux 系统中,常将“主内存”称为核心(core),核心映像(core image) 就是 “进程”(process)执行当时的内存内容。当进程发生错误或收到“信号”(signal) 而终止执行时,系统会将核心映像写入一个文件,以作为调试之用,这就是所谓的核心转储(core dump)。

每当一个进程崩溃时,会在指定路径下生成core文件,我们可以访问core文件来对程序的崩溃进行定位和调试。

core问价默认是没有打开的,可以使用一下命令打开core问价的生成:

ulimit -c unlimited

以上是不限制core文件大小的命令,只要有足够的磁盘空间,就会转存程序的全部内存。如果需要限制系统产生core的大小,可以使用以下命令:

ulimit -c 1000

以上设置为core文件最大1000个字节。

要把core dump功能关闭,可以把core文件设置成0

ulimit -c 0

以上这种ulimit -c unlimited只限定在当前终端,退出终端后失效,所以需要写入配置文件/etc/profile中

# 编辑 profile 文件
vi /etc/profile# 将下行加到入profile 文件中
ulimit -c unlimited

写一个导致段错误的案例代码

#include <stdio.h>
#include <stdlib.h>int main(int argc, char **argv)
{int *p = NULL;// 给一个NULL指令赋值,会产生 Segmentation fault 错误*p = 100;return 0;
}

定义了一个空指针,再给空指针赋值,会报错。

在当前文件夹下会出现一个core文件。下面就可以通过core来进行调试,使用GDB调式core的命令格式如下:

gdb <程序> <core文件>#例如
gdb hello core

可以看到程序的第9行出错。第9行变量p是一个空指针,所以产生了错误。

有的时候为什么即使报出了Segmentation fault(core dumped),但是当前路径下没有core文件呢?这是因为core文件默认生成路径不对,可以通过以下命令来查看core文件路径

cat /proc/sys/kernel/core_pattern

可以修改core文件路径,使用以下命令(需要再root权限下):

echo core > /proc/sys/kernel/core_pattern

修改后就可以生成了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文怎么改才能降低重复率

一、引言&#xff1a;智能工具助力&#xff0c;轻松降低论文重复率 论文的重复率是学术写作中的重要问题&#xff0c;如何有效降低重复率成为了许多研究者的关注焦点。如今&#xff0c;智能工具的发展为我们提供了更多选择。本文将介绍几种实用的智能工具&#xff0c;包括快码…

JAVA:深入了解Java中的Synchronized关键字

1、简述 在Java中&#xff0c;多线程编程是一项常见的任务&#xff0c;然而&#xff0c;它也伴随着一系列潜在的问题&#xff0c;比如竞态条件&#xff08;Race Condition&#xff09;和数据不一致性。为了解决这些问题&#xff0c;Java提供了一种同步机制&#xff0c;即synch…

【华为数据之道学习笔记】3-2 基础数据治理

基础数据用于对其他数据进行分类&#xff0c;在业界也称作参考数据。基础数据通常是静态的&#xff08;如国家、币种&#xff09;&#xff0c;一般在业务事件发生之前就已经预先定义。它的可选值数量有限&#xff0c;可以用作业务或IT的开关和判断条件。当基础数据的取值发生变…

5G下行链路中的MIMO

5G MIMO 影响5G MIMO配置的主要因素是天线的数量和层数UE和gNB有一些预定义的表来定义天线端口和层的数量&#xff0c;选择了特定的表&#xff0c;UE如何确定表中的哪一行用于gNB的每次传输DCI 1-1中该规定了Antenna port 和 层数DMRS 端口数表示正在使用的天线数量&#xff0…

波奇学Linux:Linux进程状态,进程优先级

编写一个程序模拟进程 查看进程状态 修改代码后发现进程状态为由S变成R R为运行态&#xff0c;S为阻塞态 第一次为S是因为调用了外设&#xff08;printf调用屏幕外设&#xff09;&#xff0c;实际上应该为R&#xff0c;S状态轮换&#xff0c;但是R太快了&#xff0c;所以每次…

中国区县人工智能企业数量,shp/excel格式,数据全,覆盖2010-2023年

基本信息. 数据名称: 中国区县人工智能企业数量 数据格式: Shpexcel 数据时间: 2010-2023年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a;见【吧唧数据】www.bajidata.com 1a2023人工智能企业数量&#xff08;个&…

模块二——滑动窗口:3.无重复字符的最长子串

文章目录 题目描述算法原理解法⼀&#xff1a;暴⼒求解&#xff08;不会超时&#xff0c;可以通过&#xff09;解法二&#xff1a;滑动窗口 代码实现解法⼀&#xff1a;暴⼒求解(时间复杂度为O(N^2^)&#xff0c;空间复杂度为O(1))解法二&#xff1a;滑动窗口(时间复杂度为O(N)…

LeetCode-合并有序链表问题

合并两个有序链表 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路&#xff1a; 首先建立一个头节点方便后续操作&#xff0c;然后开始循环将两个链表的节点值进行比较&#xff0c;如果list1节…

hbuiler中使用npm安装datav

注&#xff1a;datav边框样式目前使用时&#xff1a;适用于网页&#xff0c;不适用于app 1、先安装node 安装、配置Node路径 2、为Node配置环境变量 3、在hbuilder的设置中填写node的路径 配置 4、打开cmd输入npm install jiaminghi/data-view 安装dataV&#xff0c;&…

MicroSD 卡 使用读卡器 读取速度测试

设备 - - 电脑为m.2固态硬盘 usb口为USB3.2 gen2接口(即支持1GB/s的接口) cpu: amd3600 测试方案1 直接MicroSD卡放入读卡器测试 38MB/s 从sd卡复制到本地C盘 测试方案2 MicroSD卡使用闪迪的SD卡套套上之后一起插入读卡器 76MB/s 从sd卡复制到本地C盘

uni-app应用设置 可以根据手机屏幕旋转进行 (横/竖) 屏切换

首先 我们打开项目的 manifest.json 在左侧导航栏中找到 源码视图 然后找到 app-plus 配置 在下面加上 "orientation": [//竖屏正方向"portrait-primary",//竖屏反方向"portrait-secondary",//横屏正方向"landscape-primary",//横屏…

Mybatis核心配置文件加载流程详解

Mybatis核心配置文件加载流程详解 本文将介绍MyBatis在配置文件加载的过程中&#xff0c;如何加载核心配置文件、如何解析映射文件中的SQL语句以及每条SQL语句如何与映射接口的方法进行关联。 映射配置文件 在介绍核心配置文件加载流程前&#xff0c;先给出一个简单的MyBati…

ROS gazebo 机器人仿真,环境与robot建模,添加相机 lidar,控制robot运动

b站上有一个非常好的ros教程234仿真之URDF_link标签简介-机器人系统仿真_哔哩哔哩_bilibili&#xff0c;推荐去看原视频。 视频教程的相关文档见&#xff1a;6.7.1 机器人运动控制以及里程计信息显示 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 本文对视频教程…

Docker入门指南:从基础到实践

在当今软件开发领域&#xff0c;Docker已经成为一种不可或缺的工具。通过将应用程序及其依赖项打包成轻量级的容器&#xff0c;Docker实现了开发、测试和部署的高度一致性。本文将深入研究Docker的基本概念&#xff0c;并通过详细的示例代码演示如何应用这些概念于实际场景中。…

基于FPGA的视频接口之高速IO(光纤)

简介 对于高速IO口配置光纤,现在目前大部分开发板都有配置,且也有说明,在此根据自己的工作经验以及对于各开发板的说明归纳 通过高速IO接口,以及硬件配置,可以实现对于光纤的收发功能,由于GTX的速率在500Mbs到10Gbps之间,但通道高速io可配置光纤10G硬件,物理通完成,则…

掌握 Python sympy 库的高级计算技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Sympy是Python中一个强大的符号计算库&#xff0c;为数学和科学计算提供了丰富的功能。本文将深入介绍Sympy库的各项功能&#xff0c;并提供丰富的示例代码&#xff0c;以帮助大家更好地理解和应用这一工具。 S…

【论文精读】REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS 前言ABSTRACT1 INTRODUCTION2 REACT: SYNERGIZING REASONING ACTING3 KNOWLEDGE-INTENSIVE REASONING TASKS3.1 SETUP3.2 METHODS3.3 RESULTS AND OBSERVATIONS 4 DECISION MAKING TASKS5 RELATED WORK6 CONCLUSI…

SpringBoot整合ActiveMQ

SpringBoot整合ActiveMQ 文章目录 SpringBoot整合ActiveMQ下载与安装SpringBoot整合ActiveMQ导坐标改配置&#xff0c;默认的保存位置生产与消费消息实现监听类——实现消息自动消费监听器转发消息&#xff1a;流程性业务消息消费完转入下一个消息队列 下载与安装 https://act…

8、操作符重载

友元 可以通过friend关键字&#xff0c;把一个全局函数、另一个类的成员函数或者另一个类整体&#xff0c;声明为授权类的友元友元拥有访问授权类任何非公有成员的特权友元声明可以出现在授权类的公有、私有或者保护等任何区域且不受访问控制限定符的约束友元不是成员&#xf…

Qt + MySQL(简单的增删改查)

Qt编译MySql插件教程 帮助&#xff1a; SQL Programming QSqlDatabase 静态函数 1.drivers()&#xff0c;得到可以使用的数据库驱动名字的集合 [static] QStringList QSqlDatabase::drivers();2.addDatabase()&#xff0c;添加一个数据库实例 [static] QSqlDatabase QSql…