『C/C++养成计划』C++项目遇到Aborted (core dumped)的处理方法

article/2025/10/29 15:40:07
C++项目遇到Aborted (core dumped)的处理方法

文章目录

  • 一. 关于Core Dump的分析
    • 1.1. 什么是Core Dump
    • 1.2. 为何有时程序Down了,却没生成 Core文件
    • 1.3. 如何使用core文件
  • 二. 具体实例分析
    • 2.1. core dump的生成方式
      • 2.1.1. 查看生成core文件的开关是否开启,输入命令
      • 2.1.2.使用ulimit -c [kbytes] 可以设置系统允许生成的core文件大小。
      • 2.1.3. 指定生成文件的路径和名字
      • 2.1.4. 使用GDB确定错误
    • 2.2. GDB 常用操作
  • 三. 参考文献

一. 关于Core Dump的分析

在这里插入图片描述

1.1. 什么是Core Dump

  • Core Dump是一个运行时错误。
  • Core的意思是内存, Dump的意思是扔出来, 堆出来。在开发(或使用)一个程序时,有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped)。虽然系统没事,但我们下次仍可能遇到相同的问题。这时候可以查看一下有没有形如core.PIDcore文件生成,这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,让我们或是debugger做为参考。这个动作就叫作core dump
  • core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump简而言之,进程异常终止,进程用户空间的数据就会被写到磁盘。

1.2. 为何有时程序Down了,却没生成 Core文件

  • 有时候程序down了, 不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdbsteplinux下调试工具gdb是很强大的调试器), 一步一步寻找,但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file
  • 但是core文件却没有生成,这是因为core.PIDcore文件的生成跟你当前系统的环境设置有关系,系统默认core文件的大小为0 (注意core file size (blocks, -c) 0这行,这表示的是分配给core文件的长度(单位为字节,一个块的大小要分系统而定了),为0肯定是不得行的,那就修改之),我的下面截图是不为0的

1.3. 如何使用core文件

  • 发生core dump之后,使用gdb查看core文件的内容, 以定位文件中引发core dump的行,在在Linux下,查看core文件中的出错堆栈信息有二种方式,使用:gdb -c core.pid program_namegdb [program_name] [core.pid]可以进入gdb模式:
  • 在进入gdb后输入where并回车,就可以指出是在哪一行被Down掉,在哪个函数内,由谁调用等等。
  • 在进入gdb后输入 bt,用bt命令查看backtrace以检查发生程序运行到哪里,来定位core dump的文件->行。

在这里插入图片描述

二. 具体实例分析

  • 注意:如果程序是在docker中运行的,记得启动docker的时候加上--privileged 参数,该参数让 container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器

2.1. core dump的生成方式

  • Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息。但是生成core文件需要设置开关,具体步骤如下:

2.1.1. 查看生成core文件的开关是否开启,输入命令

ulimit -a
  • 如果第一行core文件大小为0,没有开启。

在这里插入图片描述

2.1.2.使用ulimit -c [kbytes] 可以设置系统允许生成的core文件大小。

ulimit -c 0              #不产生core文件
ulimit -c 100            #设置core文件最大为100k
ulimit -c unlimited      #不限制core文件大小   
  • 执行命令 ulimit -c unlimited,然后ulimit -a查看core

在这里插入图片描述

  • 注意: 这样进程崩溃就可以生成core文件了,这种方法只能在shell中生效,需要此设置一直生效需要做如下设置
vim /etc/profile                                   
# 然后进入编辑模式,在profile文件中加入
ulimit -c unlimited
  • 保存退出,重启服务器,改文件就长久生效,或者
source /etc/profile

2.1.3. 指定生成文件的路径和名字

  • 默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core, 通过修改/proc/sys/kernel/core_uses_pid文件,可以控制core文件保存位置和文件格式。
vim /etc/sysctl.conf                                      
# 进入编辑模式,加入下面两行kernel.core_pattern=/tmp/corefile/core_%t_%e_%p
kernel.core_uses_pid=0
  • 这里说一下core_pattern的命名参数如下:
%c 转储文件的大小上限
%e 所dump的文件名
%g 所dump的进程的实际组ID
%h 主机名
%p 所dump的进程PID
%s 导致本次coredump的信号
%t 转储时刻(由1970年1月1日起计的秒数)
%u 所dump进程的实际用户ID
  • 执行如下命令,设置修改马上生效,并且创建/tmp/corefile目录
sysctl -p /etc/sysctl.conf
mkdir /tmp/corefile

2.1.4. 使用GDB确定错误

gdb ./test_license /tmp/corefile/core_1680515069_test_license_24078 

在这里插入图片描述

  • 如果最后报出的信息是系统库,则可以在gdb下输入bt来调出堆栈信息,如果是多线程,则输入thread apply all backtrace 来显示所有线程栈回溯。我这里是原因是配置文件中忘记写use_keyframe_only

在这里插入图片描述

2.2. GDB 常用操作

  • 下边列出了GDB一些常用的操作。
启动程序:run
设置断点:b 行号|函数名
删除断点:delete 断点编号
禁用断点:disable 断点编号
启用断点:enable 断点编号
单步跟踪:next 也可以简写 n
单步跟踪:step 也可以简写 s
打印变量:print 变量名字
设置变量:set var=value
查看变量类型:ptype var
顺序执行到结束:cont
顺序执行到某一行: util lineno
打印堆栈信息:bt

三. 参考文献

  • Linux 生成 core dump的方法及设:https://www.cnblogs.com/flyinggod/p/13415862.html
  • Linux遇到Aborted (core dumped):https://blog.csdn.net/qq_35091353/article/details/112101738
  • C++项目经验(8)—— GDB快速定位程序崩溃(coredump)在哪行:https://blog.csdn.net/ROseeattimoo/article/details/127157248

http://chatgpt.dhexx.cn/article/yt3ZNCaA.shtml

相关文章

【排错】net::ERR_ABORTED 404

先说说为什么导不进去,心急的同学可以直接查看解决方法 出现这个问题是springboot在启动的时候没有带上static下的js和css文件一起跑,还有可能出现只带一部分跑,楼主就踩的是第二个雷。 先把项目关闭 一 在springboot自身带有的那个(项目名Applicatio…

C++ abort() has been called错误

程序可以成功编译,说明没有语法问题,应是代码内部的问题,报错如下: abort() has been called:中止被调用,该错误出现有很多原因,查询了多条博客后,发现一卒2018博主已经在博客上总结…

Debug Error: abort() has been called解决办法

今天调试程序的时侯,本来没有问题。后来调试了几次突然跳出“Debug Error: abort() has been called”(下图) 经过整理和网上查阅资料发现是读取数据的问题。有时是文件路径的双斜杠。我的代码中有一段是读入“test1.tif”,后面还…

Error:Could not load file“*.AXF” Debugger aborted!

Error:Could not load file“*.AXF” Debugger aborted! 在这里我的错误原因是:虽然建立项目,添加源文件,但是没有编译当前文件生成。误认为start /debug 就是dev里面的编译执行按钮 解决方案:在project框…

已解决requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054,“远程主机强迫关

已解决(Python爬虫报错,设置代理ip解决)requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054,"远程主机强迫关闭了一个现有的连接。,None,1656,…

【Linux问题处理】Aborted (core dumped)报错python

原文作者:我辈理想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、命令检查1.python执行py文件2.gdb执行py文件 二、进程检查1.检查所有python程序2.使用gdb检查进程 三、core文件检查1.开启core文件存储能…

net::ERR_ABORTED 404 (Not Found)

引用静态资源报错:net::ERR_ABORTED 404 (Not Found) *** 新加入静态资源厚,出现net::ERR_ABORTED 404 (Not Found),但是路径没有错,在idea上也可以ctrl鼠标左键访问到 解决方法:如果路径确定没有问题。 1、将文件复…

前端报错net::ERR_ABORTED 404的解决方案

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 背景概述 在IDEA项目中添加了新的前端资源,例如:CSS、JS等。在页面中对新资源进行引用时报错net::ERR_ABORTED 404。 解决方案 在此,提…

Linux遇到Aborted (core dumped)

1、问题描述 或出现: 2、关于Core Dump的分析 2.1 什么是Core Dump Core的意思是内存, Dump的意思是扔出来, 堆出来。在开发(或使用)一个程序时,有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped)。虽然系…

【解决】Requests库的SSL警告:InsecureRequestWarning: Unverified HTTPS request is being made.

Requests库的SSL警告:InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) 原因…

AdaIN

作为自己理解的简单记录: 原图A和目标风格图B 都先经过编码器分别得到A’和B’,然后AdaIN相当于起到一个特征迁移的作用。使A’的特征分布向B’靠拢,使得之后decode后的图片具有B的特征。

[advGAN]Generating Adversarial Examples With Adversarial Networks

这周读论文。。读的是这篇反正。这个内容比较新,网上也没啥有特别有价值的参考内容,把学习笔记发上来,希望能有一点点帮助 嗯似乎是提出了用GAN以解决神经网络安全性的问题。。。 白盒攻击 攻击者能够获知机器学习所使用的算法,以…

Adversarial Learning

GAN KL散度,JS散度 传统GAN 在辨别器最优时,生成器的loss为 根据KL,JS散度, 但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略时 JS散度始终未log2 而这对于梯度下降方法意味着——梯度为0 生成样本分布的支撑集就…

Adversarial Detection methods

文章目录 Kernel Density (KD)Local Intrinsic Dimensionality (LID)Gaussian Discriminant Analysis (GDA)Gaussian Mixture Model (GMM)SelectiveNetCombined Abstention Robustness Learning (CARL)Adversarial Training with a Rejection Option Energy-based Out-of-distr…

【小家Spring】Spring AOP各个组件概述与总结【Pointcut、Advice、Advisor、Advised、TargetSource、AdvisorChainFactory...】

每篇一句 基础技术总是枯燥但有价值的。数学、算法、网络、存储等基础技术吃得越透,越容易服务上层的各种衍生技术或产品 相关阅读 【小家Spring】Spring AOP原理使用的基础类打点(AopInfrastructureBean、ProxyProcessorSupport、Advised、AjType&…

ADDA: Adversarial Discriminative Domain Adaptation

ADDA原理理解 ADDA中源域和目标域经过不同的映射来实现对齐。 ADDA的目标函数包括三项: 1.源域的分类误差项 2.域分类器的分类误差项 3.生成器在目标域的误差项 1.源域的分类误差项 源域数据在经过映射Ms后的分类误差最小: 2.域分类器的分类误差项 …

IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true'

在使用 Async 注解实现异步线程的时候,为了能够在同类中调用,使用AopContext获取类的实例,结果报错: 调用如下: GetMapping("test03")public void testAsync03() throws InterruptedException {log.info(&…

ADVISOR - 1

文章目录 1. ADVISOR 是什么1. 2 ADVISOR 可以用来做什么1.3 ADVISOR 不能做什么 1. ADVISOR 是什么 它是基于 MATLAB/Simulink 开发的一系列模型、数据以及脚本,能帮助我们快速分析传统车、纯电车以及混动车的性能和油耗。 能找到的最新的 ADVISOR 版本是 2003&a…

Advisor-Advisee Relationship

一、实习目的及要求 此次实习的任务中有Advisor-advisee Relationships (AARs)和通过分别计算AAR的概率而取得的共同作者关系。在数据中,用八个4位代码表示作者。 数据从合作双方的学术经历,合作经历的角度提取了特征。例如,如果已知A与B在…

ADV

悦谷首城 我司是专业的房产服务公司,主要从事北京拆迁安置房买卖中介、房屋租赁中介、代办房屋权证、房屋产权过户手续、垫资开发商房款,收拆迁房子指标,房产信息咨询等业务。公司经营上追求规模化、规范化、服务一体化。公司本着“诚信为本…