Ubuntu 20 core dumped(核心已转储)问题分析
问题原因:
core 指核心(线圈),没有半导体之前,使用线圈内存,指代内存。
可执行文件是分段存储的,加载进内存也是分段的,如代码段、数据段、堆、栈等,段错误的原因往往是碰到了不该碰到的内存位置(如系统保留段、代码段不能被修改,使用空指针等)。
核心已转储就是说进程结束之前,内存已被储存,可以用于程序员翻看程序的“临终遗言”来定位问题。往往需要使用gdb工具查看核心转储文件,且需要采用一些设置保障核心文件能够被储存,方法如下:
参考 段错误(核心已转储)的问题原因_爱笑的木头的博客-CSDN博客_段错误 (核心已转储)
解决方法:
1.用 ulimit -a 查看 core file size 项是否为 unlimited。如果不是,修改成unlimited (指令:ulimit -c unlimited)
2.检查core产生路径是否正确, cat /proc/sys/kernel/core_pattern,如果路径不存在,则设置:echo "./core-%e-%p-%s" > /proc/sys/kernel/core_pattern
core设置主要命令解析:
//控制core文件的文件名中是否添加pid作为扩展
echo "1" > /proc/sys/kernel/core_uses_pid
//设置core文件的输出路径和输出文件名,这里我的路径是/home/boy/corefile,文件名就是后面的部分
echo "/home/boy/corefile/core-%e-%p-%t"> /proc/sys/kernel/core_pattern //参数说明
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加程序名
3. 但因为ubuntu官方为了自动收集错误,设置了服务apport.service,用于自动生成崩溃报告,我们还是无法获取core文件。
因此可以暂时将该服务关闭。
//1.关闭错误报告
sudo systemctl disable apport.service
//或
sudo service apport stop//2.启用错误报告
sudo systemctl enable apport.service
//或
sudo service apport start
apport被关闭后
重新执行程序,使用ll 命令应该就可以在当前路径下看到core文件了
4. gdb定位错误位置
gdb 可执行文件 core文件
还可以输入bt(backtrace 缩写) 命令回溯定位,可以查看下程序崩溃时的堆栈信息,定位具体程序出错函数
注意:
在使用如下命令时
gdb 可执行文件 core文件
需要找到可执行文件的位置
ROS节点可以在launch中设置gdb进行调试:
参考:
ROS 代码调试常用方式配置_ros 调试_忒懂先生的博客-CSDN博客
ROS 学习踩坑笔记2-如何解决使用GDB工具进行ROS debug_HarwardWu的博客-CSDN博客
<node name="client" pkg="example_3" type="client" output="screen" launch-prefix="xterm-egdb--args"/>以下同语句代表不同的debug方式,主要使用以下两个语句
launch-prefix="xterm -e gdb --args" //xterm命令表示新建一个terminal显示bug信息,-e参数告诉xterm执行剩下的命令行
launch-prefix="gdb -ex run --args" // 表示在运行launch的对话框内,显示bug信息
参考:
Ubuntu20.04出现段错误核心已转储问题解决方案_Abdullah al-Sa的博客-CSDN博客_段错误,核心已转储
已经设置了ulimit,为什么还是没有core文件 - 菜鸡徐思 - 博客园
[Linux] 什么是 段错误(吐核)?_giturtle的博客-CSDN博客_段错误(吐核)
Ubuntu 20 core dumped(核心已转储)问题分析相关推荐
- linux下gdb使用core文件调试程序,解决“段错误核心已转储“的问题
一.core文件介绍以及用途: 1.core文件是什么? core文件包含了程序运行时的内存状态.寄存器状态.堆栈指针.内存管理信息以及各个函数使用堆栈信息等等: 当程序运行过程中出现段错误(Segm ...
- C语言再学习 -- 段错误(核心已转储)
参看:Linux下的段错误产生的原因及调试方法 参看:Linux环境下段错误的产生原因及调试方法小结 参看:维基百科--Segmentation fault 参看:LINUX内核段错误调试详细指南精品 ...
- Ubuntu20.04出现段错误核心已转储问题解决方案
作为一个半路出家的linuc用户,coredump这个问题太让人抓狂了,网上找了好多都是不全面,不适应或者看不懂:现在终于解决了,记录一下防止以后出现还是无解,同时也分享给大家,希望大家能少踩一些坑. ...
- Caffe2:段错误(核心 已转储)
测试Caffe的时候, cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && ech ...
- keras核心已转储_转储Keras-ImageDataGenerator。 开始使用TensorFlow-tf.data(第2部分)
keras核心已转储 This article is the follow up from Part 1. Here, I will compare the tf.data and Keras.Ima ...
- 段错误(核心已转储)的问题原因
一个困扰已久的问题,今天终于明白了. core,核心(线圈),没有半导体之前,使用线圈内存,指代内存. 可执行文件是分段存储的,加载进内存也是分段的,如代码段.数据段.堆.栈等,段错误的原因往往是碰到 ...
- svm->predict()报错浮点数例外(核心已转储)
ubuntu调用opencv3.4的svm加载模型 本来的加载方式是svm->load("model.xml"),结果运行时在预测的位置报错:浮点数例外(核心已转储) 解决方 ...
- c++如何解决段错误 (核心已转储)
在后端优化中遇到了段错误 (核心已转储)问题,寻求解决方法. 首先通过不断的注释部分代码,运行,注释,运行,找到一个大概的范围是错在哪一块. 这类问题只能说根本原因是内存的非法操作.建议生成内存段错误 ...
- 【已解决】terminate called after throwing an instance of ‘cv::Exception‘,已放弃 (核心已转储)
这是运行高翔slambook2的代码出现的错误 terminate called after throwing an instance of 'cv::Exception' what(): OpenC ...
最新文章
- 自动跟随小车c语言,基于OpenCV的智能小车运动轨迹跟踪方法研究
- 可删除任意位置数据的堆
- python 网页cookie的使用
- Beta 冲刺(4/7)
- from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,
- numpy.argsort详解
- sklearn 中的preprocessing数据预处理
- 无限超越超级机器人nds_阿里重新定义个人电脑!仅名片大小,无限升级,不怕丢失无惧病毒,价格仅传统PC一半...
- (07)System Verilog 数组常用操作
- WPFのclipToBounds与maskToBounds的区别
- jackson json的使用
- Linux DRM 理解
- NETBEAN 启动报错 CANNOT LOCATE JAVA INSTALLATION IN SPECIFIED JDKHOME的解决办法
- CV中domain adaptation领域自适应问题
- 彻底干掉霸占我任务栏的2345好压的垃圾广告搜索以及天气预告工具栏
- 这个好用高效的读书笔记app软件一定要收藏
- 电脑如何拦截弹窗广告
- 华为p10计算机器在哪,华为P10怎么连接电脑教程
- C# 理解Thread.Sleep()方法
- 前端SEO优化的一些解决方案