1 出现core dump时最好的办法是使用gdb查看coredump文件

2 使用的条件

出现问题的代码,系统,所有涉及的代码都应该一起编译,然后得到符号表,这样加载符号表,使用coredump文件才有意义。

3 什么是段错误,有哪些原因会导致段错误

当访问了错误的地址时,就会发生段错误。之所以叫段错误,是因为只读数据段、代码段和操作系统所属的地址空间是不可以写的,因为拿到了指针可以做任何事情,不小心就写了。为了避免错误代码影响系统中的其它人,mmu和操作系统就会发出一个段错误给引起错误的进程,这个信号在unix link系统上叫SIGSEGV,进程都有该信号的一个handler,一旦收到该信号,handler就会立即结束本进程的执行,并且生成一个core dump文件。因为主要是访问了错误的段造成的,因此取名为段错误。

导致段错误的原因:

1> 解引用了一个null指针。

2> 试图访问一个不存在的地址,也就是说,超过了进程寻址空间的地址。

3> 试图访问没有访问权限的地址。

4> 试图去写一个只读的地址空间。

更直接一点的原因有:

1> 使用未初始化的指针。

2> 使用了已经释放了的指针。

3> 缓冲区溢出

4> 栈溢出

4 core dump文件本身

4.1 core dump文件是elf格式的

4.2 设置core dump文件的大小

ulimit -cn

4.3 core dump文件中没有符号表

4.4 core dump文件是进程的内存镜像

进程的内存镜像是真实的物理内存数据,物理内存数据分布在3G的用户地址空间中。

从上到下依次是,栈空间、内存映射空间(so)、堆空间,bss段、data段和代码段。

在进程收到SIGSEGV信号时,就会停止进程当前指令的执行,而将这些物理内存数据写入到一个文件中。这个文件就是core dump文件。

5 core dump文件的生成

同4.4

6 core dump文件的解析

core dump文件中有程序死时的调用栈,因此只要能够将栈里面的指令对应到代码的哪个函数的哪一行,这样就可以定位错误了。所以,必须要该运行程序的符号表。

否则就会对应不上。系统崩溃的概率很小,很可能是自己写的代码或者动态库崩溃了,因此我们需要我们的程序的符号表,还需要所使用的动态库的符号表,必须是编译时生成的同一个符号表。

需要可执行程序的符号表,需要动态库的符号表。

5 backtrace具体的实现原理?

gdb coredump的使用的更多相关文章

  1. linux下 gdb+coredump 调试偶发crash的程序

    1. 打开 core dump 查看是否打开 ulimit -c 如果输出0, 说明没有打开. 方法一:使用命令 ulimit -c unlimited 可以打开,但是只对当前终端有效, 方法二: 配 ...

  2. [skill][gdb][coredump][abrt] 使用abrt管理程序coredump

    abrt:Automatic bug detection and reporting tool https://github.com/abrt/abrt 常用的命令: abrt-auto-report ...

  3. Linux段错误及GDB Coredump调试方法

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...

  4. 【转】使用GDB调试Coredump文件

    来自:http://blog.ddup.us/?p=176 写C/C++程序经常要直接和内存打交道,一不小心就会造成程序执行时产生Segment Fault而挂掉.一般这种情况都是因为数组越界访问,空 ...

  5. gdb 调试coredump文件过程

    gdb 调试coredump文件过程: 第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep                 进程名称 找到 ...

  6. gdb 调试coredump文件过程:

    第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep                 进程名称 找到进程的pid 2.gdb -p pid ...

  7. coredump

    COREDUMP调试的使用 一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程 ...

  8. coredump调试的使用

    一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满 ...

  9. GDB动态库搜索路径

    当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...

随机推荐

  1. 最全py2exe

    这次不是直接讲解下去,而是谈一下如何把我们写的游戏做成一个exe文件,这样一来,用户不需要安装python就可以玩了.扫清了游戏发布一大障碍啊! perl,python,java等编程语言,非常好用, ...

  2. Linux 之 Samba服务器

    Samba服务器 参考教程:[千峰教育] 一:Samba简介: 360百科: Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB(Server M ...

  3. Web Cache

    我们都知道,网站对于一些常用数据做缓存,会加速网站访问,像下面这样: public string GetFoo() { if ( cache.get("Foo") == null ...

  4. Web前端入门知识

    第一阶段:理论知识 第一章:协议理解 第二阶段:了解知识 第二章:前端简介 第三阶段:入门知识 第三章:标签结构 第四章:常用标签 第四阶段:样式搭配 第五章:样式初见 第六章:属性选择 第七章:属性 ...

  5. Codeforces Gym 100650C The Game of Efil 模拟+阅读题

    原题链接:http://codeforces.com/gym/100650/attachments/download/3269/20052006-acmicpc-east-central-north- ...

  6. 邁向IT專家成功之路的三十則鐵律 鐵律二十七 IT人夢想之道-實踐

    有句話說:「人因夢想而偉大」.身為IT的您不知道夢想為何?是希望能夠環遊世界.開一間咖啡廳.買一部法拉利跑車.買一部重機.中大樂透頭彩.娶心目中的女神當老婆,還是只要明天還能活著就好了.無論您的夢想為 ...

  7. [Algorithm] Write a Depth First Search Algorithm for Graphs in JavaScript

    Depth first search is a graph search algorithm that starts at one node and uses recursion to travel ...

  8. 树莓派 Zero作为飞控图传

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的链接.图片显示,请访问我的博客原文: http://www.cnblog ...

  9. C++ sort函数用法

    参考文档:http://hi.baidu.com/posinfo/item/dc3e73584c535cc9d2e10c27 C++ sort函数用法 FROM:http://hi.baidu.com ...

  10. 整合Hibernate3.x

    As of Spring 3.0, Spring requires Hibernate 3.2 or later. Hibernate 3和Hibernate 4有一些区别,所以对于spring而已, ...