gdb coredump的使用
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的使用的更多相关文章
- linux下 gdb+coredump 调试偶发crash的程序
1. 打开 core dump 查看是否打开 ulimit -c 如果输出0, 说明没有打开. 方法一:使用命令 ulimit -c unlimited 可以打开,但是只对当前终端有效, 方法二: 配 ...
- [skill][gdb][coredump][abrt] 使用abrt管理程序coredump
abrt:Automatic bug detection and reporting tool https://github.com/abrt/abrt 常用的命令: abrt-auto-report ...
- Linux段错误及GDB Coredump调试方法
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...
- 【转】使用GDB调试Coredump文件
来自:http://blog.ddup.us/?p=176 写C/C++程序经常要直接和内存打交道,一不小心就会造成程序执行时产生Segment Fault而挂掉.一般这种情况都是因为数组越界访问,空 ...
- gdb 调试coredump文件过程
gdb 调试coredump文件过程: 第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep 进程名称 找到 ...
- gdb 调试coredump文件过程:
第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep 进程名称 找到进程的pid 2.gdb -p pid ...
- coredump
COREDUMP调试的使用 一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程 ...
- coredump调试的使用
一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满 ...
- GDB动态库搜索路径
当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...
随机推荐
- Day 16 购物车
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017/6/7 #! ...
- hdu 4504(动态规划)
威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- AC日记——爱改名的小融 codevs 2967
2967 爱改名的小融 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 白银 Silver 题解 题目描述 Description Wikioi上有个人叫小融,他喜欢 ...
- Xamarin.Forms支持的地图显示类型
Xamarin.Forms支持的地图显示类型 在Xamarin.Forms中,专门提供了一个Map视图,用来显示地图.根据用户的需求不同,该视图支持三种地图显示类型,用户可以通过Map视图提供的M ...
- K&R——第五章 指针与数组
#include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int siz ...
- spring lifeCycle
Lifecycle接口定义了每个对象的生命周期.如下 public interface Lifecycle { void start(); void stop(); boolean isRunning ...
- python学习笔记1-numpy/enumerate
1. np.size和np.prod import numpy as np x = np.zeros((3, 5, 2), dtype=np.complex128) # ndarray.size is ...
- ant的安装和配置
1.从官网下载bin源码 http://ant.apache.org/bindownload.cgi#Verify%20Releases 校验源码的完整性 2.直接把解压,然后把文件放入/usr/lo ...
- Excel导入的HDR=YES; IMEX=1详解
参数HDR的值:HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用.系统默认的是YES 参数Excel 8.0对于Excel 97以上版本都 ...
- Python3.2官方文档翻译--作用域和命名空间实例
6.2.1 作用域和命名空间实例 以下的实例主要用来示范怎样引用不同的作用域和命名空间,keywordglobal和nonlocalru怎样影响变量绑定. 实例执行结果是: After local a ...