一、core文件介绍以及用途:

1、core文件是什么?

core文件包含了程序运行时的内存状态、寄存器状态、堆栈指针、内存管理信息以及各个函数使用堆栈信息等等;
当程序运行过程中出现段错误(Segmentation Fault),程序将停止运行,由操作系统把程序当前的内存状况存储在一个 core 文件中,即核心转储文件(Coredump File),core 文件是程序运行状态的内存映象。

2、使用场景,段错误

使用程序的时候,总会遇到

“段错误(核心已转储)”

这样的错误提示信息,通过gdb与core文件便可以查看程序错误的地方。

3、造成段错误的原因

主要以下几个方面

内存访问越界
多线程使用了线程不安全的函数
非法指针
堆栈溢出
多线程读写的程序没有加锁保护

二、core文件调试举例

1、举例一个用了空指针的程序

这里我们故意使用一个空指针,然后造成段错误,去演示如何使用core文件调试程序

#include <iostream>int main()
{*(char *) 0 = 0;//使用一个空指针,会报段错误int num;std::cout<<"please enter a number:";std::cin>>num;for (int i = 0; i < 10; i ++){num += i;std::cout<<"number + i = "<<num <<std::endl;}return 0;
}

2、设置core文件大小

因为默认的core文件大小是0 ;也就是默认不保存这个文件;所以需要我们设置一下;
使用下面的命令去查看以及设置:

ulimit -c //查看core文件大小默认是0;//此时不生成core文件
ulimit -c unlimited //不限制生成core文件的大小

但是如果你是普通用户,这样的操作一般都会报错误:“不允许的操作”;

bash: ulimit:core file size:无法修改limit值:不允许的操作

遇到这样的问题应该怎么解决呢?

1、用root用户去使用上述:ulimit -c unlimited命令
2、返回普通用户再使用一次:ulimit -c unlimited

PS:像使用命令 "sudo vi /etc/security/limits.conf "的这个方法,自己也有尝试过,但是好像没有效果,也写出来供大家参考参考吧!

sudo vi /etc/security/limits.conf"

找到下图的soft core,

把 0 改为 unlimited;

3、设置core文件的保存位置以及文件名字格式信息

使用 echo 更巧妙一点:

echo "/home/kylin/Core_P/core-%e" > /proc/sys/kernel/core_pattern

修改文件的格式信息,有利于core文件的保存和查看,名字的格式可以参考下面的:

%p - 添加pid(进程id)
%u - 添加当前uid(用户id)
%g - 添加当前gid(用户组id)
%s - 添加导致产生core的信号
%t - 添加core文件生成时的unix时间
%h - 添加主机名
%e - 添加导致产生core的命令名

PS:另外使用的方法,算是踩的一个坑。
就是通过编辑文件去设置保存位置与信息

sudo vim /proc/sys/kernel/core_pattern


结果就是一直有:

"警告:此文件自读入后已发生改动!!!"
"core pattern" E667:同步失败的信息

所以使用 echo的方法,可以解决上面的问题,而且是有效的!

4、使用core文件查看错误

由于程序里面故意写了一个空指针,所以运行的时候肯定会有"段错误(核心已转储)";
但是不同的是,这个时候的core文件的存在的,而且保存在上面刚刚设置的地方

使用 : ”gdb + [exec file] + [core file] “调试core文件
结果能够显示出错的函数、出错的行数,并显示该行代码

linux下gdb使用core文件调试程序,解决“段错误核心已转储“的问题相关推荐

  1. c++如何解决段错误 (核心已转储)

    在后端优化中遇到了段错误 (核心已转储)问题,寻求解决方法. 首先通过不断的注释部分代码,运行,注释,运行,找到一个大概的范围是错在哪一块. 这类问题只能说根本原因是内存的非法操作.建议生成内存段错误 ...

  2. c语言 段错误 核心已转移,c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决...

    1.首先安装ssl库文件 sudo apt-get install libssl-dev 引入头文件 #include 2.定义调用方法 void call_cbc(){ DES_cblock key ...

  3. linux误删 bin目录,记linux下rm误删bin文件的解决方式

    平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...

  4. C++(Qt)软件调试---linux下生成/调试Core文件(3)

    #软件调试 C++(Qt)软件调试-linux下生成/调试Core文件(3) 文章目录 C++(Qt)软件调试---linux下生成/调试Core文件(3) 前言 1.C++生成Core和使用GDB调 ...

  5. 使用gdb和core dump迅速定位段错误

    使用gdb和core dump迅速定位段错误 关键字:gdb.段错误.core dump 一.什么是core dump core:内存.核心的意思: dump:抛出,扔出: core dump:前提: ...

  6. linux下tar解压文件(解决unzip无法解压超过2gb文件方法

    突然发现unzip无法解压超过2GB文件,在linux上有这个问题,怪不得linux上大部分是tar,或者bz 解决方法: 只能先压缩为tar包,或者bz包. 解压tar包用的命令是不一样的,查了半天 ...

  7. linux下g 的core文件,gcore提取coredump方法

    工具准备 crash dzh@EF-dzh:~/opt/crash-7.2.3$ make target=arm64 TARGET: ARM64 CRASH: 7.2.3 GDB: 7.6 make成 ...

  8. mysql出现core dumped_mysql-为什么我遇到分段错误(核心已转储)?

    这是我要运行的代码.它可以编译,并且工作良好,直到昨天. #include #include int main(int argc, char **argv) { MYSQL *conn; MYSQL_ ...

  9. linux资源异常无法fork,linux 下 fork 后的文件资源处理问题

    我们都知道 linux 下 fork 一个子进程出来,他能够继承父进程的文件资源,网络资源等,也从父进程那里拷贝了代码段,数据段,缓冲区等等到自己这里有了新的一份,那么,如果父子进程对于打开的文件资源 ...

最新文章

  1. Apache Doris在美团外卖数仓中的应用实践
  2. 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
  3. 2020ICPC(南京) - Just Another Game of Stones(吉司机线段树+博弈)
  4. 连续对焦 auto对焦_如何在Windows 10上使用对焦辅助(请勿打扰模式)
  5. c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出
  6. Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型
  7. Halcon 学习总结——错误处理方法
  8. 页面自适应纯CSS,使用rem单位
  9. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_13_Thread和Runnable的区别...
  10. CAD中如何使用Lisp程序编写坐标标注功能
  11. android x86 精简版,逆天!Windows7终极纯净版x86,仅239MB | 殁漂遥
  12. rand()用法总结及注意事项
  13. ios swift判断两个对象是否相等 == isEqual remove add
  14. 小程序 - 网址大全
  15. 微信小程序的video组件,更改播放按钮
  16. 赛门铁克:中国挤掉美国成僵尸电脑超级大国
  17. Visual Studio 2015 的安装和使用
  18. MD04, MD05, MD07, MD07区别
  19. 【数据分析】全球医疗卫生开放数据概览
  20. 爬十格阶梯每次一步或两步_爬上信息阶梯

热门文章

  1. 区块链BaaS云服务(19)趣链Hyperchain
  2. python—多线程之死锁
  3. GCC,Clang,make,cmake,makefile,CMakeLists.txt的概念
  4. IMAP和POP3的相关知识与区别
  5. 树莓派3开wifi热点
  6. 2020-11-2(安卓入门(每个字皆为手打))
  7. MySQL删除用户(DROP USER)
  8. 12、MySQL触发器到底是什么?
  9. 利用CSS设置页面的垂直居中效果
  10. 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】