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. linux shmget shmctl

    shmgetint shmget(key_t key, size_t size, int flag);key: 标识符的规则size:共享存储段的字节数flag:读写的权限返回值:成功返回共享存储的i ...

  2. 不需 porting 就可充電的 charger ic。

    Origin : 今天同事問我一個關於配有 RT9458 charger ic 的手機的問題, 這手機可能要送到廠商那, 需要 porting charger ic, 看了一下,跟他說這個充電部份不需 ...

  3. CI调试应用程序

    该分析器将在页面下方显示基准测试结果,运行过的 SQL 语句,以及 $_POST 数据.这些信息有助于开发过程中的调试和优化. 在控制器中设置以下方法以激活该分析器: $this->output ...

  4. Wireshark如何单独导出包的列信息

    Wireshark如何单独导出包的列信息   Wireshark提供了丰富的数据包导出功能.用户可以将数据包按照需要导出为各种格式.这些格式文件包含了包的各种信息.但是很多时候,用户只需要获取包的特定 ...

  5. CDOJ_24 八球胜负

    8球是一种台球竞赛的规则.台面上有7个红球.7个黄球以及一个黑球,当然还有一个白球.对于本题,我们使用如下的简化规则:红.黄两名选手轮 流用白球击打各自颜色的球,如果将该颜色的7个球全部打进,则这名选 ...

  6. 预防SQL注入笔记

    SQL注入如何预防? 本文参考自owasp,重点是提供清晰,简单,可操作的指导,以防止应用程序中的SQL注入漏洞.不幸的是,SQL注入攻击很常见,这是由于两个因素: SQL注入漏洞的显着流行 目标的吸 ...

  7. bootstrap-datetimepicker时间控件的使用

    官方文档:http://www.bootcss.com/p/bootstrap-datetimepicker/demo.htm 常规使用: <div class="input-grou ...

  8. javascript --- 临时构造器F()

    这篇内容也是之前讲到过的,纯属无聊,莫要见怪.~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)- 正如上文所说,如果所有的prototype属性都指向了一个相同的对象,父 ...

  9. 手机微硬盘读取速度>50MB/s eMMC技术浅析

    转载:http://mobile.zol.com.cn/296/2968659_all.html#p2968659 手机微硬盘读取速度>50MB/s 在开始今天的话题之前,请大家随笔者一起时光倒 ...

  10. sshpass结合ssh和scp可以自动完成密码登录,无需手动输入密码

    使用方法: 1.sshpass -p 123456 ssh admin@1.1.1.1 "touch file"  远程创建文件file 2.sshpass -p 123456 s ...