coredump分析

来源:互联网 发布:中国进出口统计数据库 编辑:程序博客网 时间:2024/05/18 02:18

一.什么是coredump?

coredump一般是指程序在linux下出现某些bug或者异常之后造成程序异常退出或者终止,并在一定条件下生成的一个叫做core的文件,其中包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等。

我们可以理解为这是程序在崩溃处的各种临时状态保存文件,通过工具分析这个文件我们可以知道程序在异常退出时的各种临时状态,找出其异常信息并进行定位修改。

二.coredump产生的原因

coredump产生的原因可以分为以下几个大的的方面:

1.内存访问越界

包括数组下标越界,c风格字符串没有结尾符号而导致的访问越界,字符串操作函数造成的读写越界问题
2.多线程使用了不安全函数

主要是一些可重入函数,所谓可重入函数即是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,然后再返回继续执行这段函数。
3.被多个线程同时访问的数据未加上锁

   可通过临界区和信号量等来保护临界资源,避免被多个函数同时修改
4.使用非法的指针

包括空指针,野指针和不正确的指针类型转换造成的内存访问错误
5.栈溢出

由于递归函数不收敛等原因而造成的程序栈溢出,局部变量和函数形参等信息在执行时都是压入到栈上的,栈的大小一般在1M到4M之间。

三.coredump的定位分析

可以进行coredump定位分析的工具很多,其中比较常用的是GDB,GDB是linux下一个非常强大的调试分析工具,下面是几个常用的GDB命令
记住几个常用的gdb命令:
l(list) ,显示源代码,并且可以看到对应的行号;
b(break)x, x是行号,表示在对应的行号位置设置断点;
p(print)x, x是变量名,表示打印变量x的值
r(run), 表示继续执行到断点的位置
n(next),表示执行下一步
c(continue),表示继续执行
q(quit),表示退出gdb

调试时进入到对应的core文件生成目录,优先确认是否core文件格式并启用gdb进行调试即可。


0 0
原创粉丝点击