文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump
1. coredump
1.1 coredump简介
core dump,又称为核心转储,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件
coredump文件含有当进程被终止时内存、CPU寄存器和各种函数调用堆栈信息等,可以供后续开发人员进行调试
1.2 coredump的文件存储路径
一般情况使用下列命令可以看到core文件的存储位置:
cat /proc/sys/kernel/core_pattern
1
个人的如下:
我们可以通过修改kernel的参数来指定内核生成的coredump文件的文件名。常见设置如下:
//在终端键入下列命令
echo "/data/coredump/core.%e.%p" > /proc/sys/kernel/core_pattern
12
在这条命令中,/data/coredump是你自己指定的存放coredump文件的路径,所有产生的coredump文件将会存放在这里,%e表示程序的文件名,%p表示进程的ID(当然还有一些其他的参数可以设置,例:%t显示创建的时间)
在这里个人蠢了一下,没有创建存放的目录即/data/coredump,导致后面一直无法生成coredump文件,后面加上mkdir /data/coredump即创建成功,os:真是被自己蠢哭了
1.3 coredump产生的条件
首先确定当前会话的能生成的coredump文件大小,如果为0则不会产生对应的coredump文件:
这个时候就需要修改和设置了,可以使用下列两种方式设置:
//当前有效的修改
ulimit -c [size]  //这里size一般修改为unlimited
//可以使用ulimit -a访问详细信息
ulimit -a
1234
上述修改方式在关闭后再重启就无效了,所以采用下列方式使它永久有效:
//修改/etc/profile配置
vim /etc/profile
//添加 ulimit -c unlimited
123
然后执行source /etc/profile或者关闭重新开启就能生效了
1.4 coredump产生原因
1.内存访问越界
具体原因可能是:1.由于使用错误下标,导致数组访问越界
2.搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符
3.使用strcpy,strcat,sprintf等字符串操作函数时,容易出现读写越界的情况
2.多线程程序使用了线程不安全的函数
3.多线程读写的数据未枷锁保护
4.非法指针、包括使用空指针或随意使用指针转换
5.堆栈溢出
2. 测试生成coredump
//测试文件
#include <iostream>
int main()
{
    int b = 1;
    int* a;
    *a = b;
    return 0;
}
123456789
很明显a指针指向错误,会产生段错误,首先编译该文件,执行文件:
g++ -g -o test test.cpp    //编译得到可执行文件test
./test   //运行可执行文件
12
得到如下结果,显示生成了coredump文件:
现在去存储coredump文件的目录查找该coredump,并将其移出到表目录进行分析:
cd /data/coredump    //自己设置的存储目录
ls -l       //列出文件
cp core.test.32469 /home/ubuntu    //拷贝core文件到表目录,test为文件名,32469为进程ID
123
进入存储目录查看coredump文件:
移动到表目录:
该文件也是ELF文件,可以采用readelf查看该文件:
//例:
readelf -h core.test.32469
12
当我们使用gdb调试时,是先从可执行文件中读取符号表信息,然后再读取core文件。这个步骤会让人疑问,难道core文件中无符号表信息么?不与可执行文件一同执行可以么?
我们可以直接查看core文件是否含有符号表信息,执行以下命令:
objdump -x core.test.32469 | tail
1
其中可以看到SYMBOL TABLE:  no symbols,表明当前的ELF文件中没有符号表信息
接下来利用gdb进行分析(须带可执行文件):
gdb test core.test.32469
1
可以看到core在第六行:
接着打印a和b的值:
可以看到指针a指向的明显不是b的地址,所以引发了段错误
到这里我们的gdb调试分析coredump就结束了,想了解更多有关gdb调试的可以访问本人的这篇文章【linux】gdb调试
------------------------------------------get------------------------------------------------------
1.coredump文件
2.使用gdb调试分析coredump
---------------------

原文:https://blog.csdn.net/qq_38790716/article/details/85107405

Linux gdb分析core dump文件的更多相关文章

  1. Unix 用gdb分析core dump文件

    产生core文件条件 用ulimit -c 指定core文件大小来开启core文件的生成,如:ulimit -c unlimited 用gdb分析core文件的条件 可执行程序在编译时,需加入-g参数 ...

  2. ZT 用gdb调试core dump文件

    用gdb调试core dump文件 转载自:http://blog.chinaunix.net/u2/83905/showart_2134570.html 在Unix系统下,应用程序崩溃,一般会产生c ...

  3. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

  4. linux下生成core dump文件方法及设置【转】

    转自:http://blog.csdn.net/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/196 ...

  5. linux下生成core dump文件方法

    core 文件的简单介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 co ...

  6. 使用GDB 追踪依赖poco的so程序,core dump文件分析.

    前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...

  7. Linux上Core Dump文件的形成和分析

    原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而 ...

  8. Linux使用笔记: 定制core dump文件的文件名

    在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要 ...

  9. linux 下如何打开core dump文件开关

    dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息.在window下,要能生成dump文件,需要自己编写相应的代码.不过现在网上可以找到相应的代码,只要把它下载后然后加到 ...

随机推荐

  1. C# 简单的区块链实现

    1.项目配置 首先新建一个 Asp.Net Core 项目,然后选择 Empty Project(空项目) 类型,建立完成后无需进行任何配置. 2.数据模型 这里我们来创建一个具体的区块数据模型,使用 ...

  2. 利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4

    利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4 以前看视频的时候,直接找到 video标签,查看视频地址,然后下载下来.. 后来发现,好多 video 标签打开元素审查,如下 ...

  3. 【转载】Session对象的作用以及常见属性

    Session对象是Asp.Net应用程序中非常重要的一个内置对象,Session是指用户从打开浏览器访问服务器到关闭浏览器之间的会话状态,在一个会话期间,服务器会自动分配一个标识SessionId. ...

  4. MySQL存储引擎的介绍

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得特定的功能. ...

  5. CSS3浏览器私有属性

    CSS3的浏览器私有属性前缀是一个浏览器生产商经常使用的一种方式.它暗示该CSS属性或规则尚未成为W3C标准的一部分.因此每种内核的浏览器都只能识别带有自身私有前缀的CSS3属性.我们在书写CSS3代 ...

  6. PHP原生EXCEL导出带样式无插件无乱码实现

    PHP原生EXCEL导出 经测试 带样式 无插件 无乱码,不需要引入任何插件,不需要修改任何编码 (使用时只需要修改引入php数据库配置文件.修改thead tbody中的数据即可.根据自己的需要去接 ...

  7. Linux下安装php开发环境

    先记录下以恶搞教程,回头自己更 https://my.oschina.net/hhly/blog/1547227

  8. 第一篇:python简介

    前言:作为对于python小白而言,我们需要知道什么是python,为什么学习python而不是其他编程语言,它相比于其他语言有什么优势,同时了解python 的执行操作过程又是怎么样的,它有哪些分类 ...

  9. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  10. Mybatis.NET Oracle 线上神奇问题:Value does not fall within the expected range.

    1.错误现象 在向数据库查询一条数据的时候报如下错误: Value does not fall within the expected range. at Oracle.ManagedDataAcce ...