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. canvas绘制视频封面--摘抄

    一.需求:上传视频,同时截取视频某一帧作为视频的封面. 二.实现思路:利用canvas绘制图像的功能,绘制图像某一帧,这里绘制了第一帧,很简单就实现了. 三.代码: <!DOCTYPE html ...

  2. 转 Python爬虫入门一之综述

    转自: http://cuiqingcai.com/927.html 静觅 » Python爬虫入门一之综述 首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为 ...

  3. poj 2253(kruskal)

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34968   Accepted: 11235 Descrip ...

  4. react的key值的作用

    因为在reactelement中有一个属性是key,该属性默认是为空值,所以一般情况下,只要组件不加上key值,react是不会去校验组件的key,而是直接采用diff算法进行对比,一旦组件加上了ke ...

  5. 洛谷——P2919 [USACO08NOV]守护农场Guarding the Farm

    P2919 [USACO08NOV]守护农场Guarding the Farm 题目描述 The farm has many hills upon which Farmer John would li ...

  6. HDU 2586 How far away ? 离线lca模板题

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. 扩展欧几里得算法(exGCD)学习笔记

    @(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by ...

  8. Ubuntu 16.04下使用Wine安装文件比对工具Beyond Compare 4

    说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 下载: (链接 ...

  9. Java加密技术(八)——数字证书

    原文:http://snowolf.iteye.com/blog/391931 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了解RSA加密算法. 在构建Java代码实现前,我们需要完成证 ...

  10. Android---简单的动画