如何分析 core 文件

Core 产生的原因

  1. 内存访问越界
  2. 多线程程序使用了线程不安全的函数。
  3. 多线程读写的数据未加锁保护
  4. 非法指针
  5. 堆栈溢出

如何生成 Core

ulimit -c unlimited
echo "/xxx/xx/core-%e-%p-%s-%t" > /proc/sys/kernel/core_pattern

默认core文件生成在当前路径,可以修改路径
%p 出Core进程的PID
%u 出Core进程的UID
%s 造成Core的signal号
%t 出Core的时间,从1970-01-0100:00:00开始的秒数
%e 出Core进程对应的可执行文件名

如何分析 core

前提是编译的 debug 版本库
命令行输入

gdb 可执行文件 core文件
功能命令示例
查看堆栈信息bt
查看某一层的堆栈信息frame , ff 0 表示打印栈顶,f 1 表示打印栈的第二层, 此时可以打印这一层的局部变量,变量地址等,如 p 变量名
上移一层up
下移一层down
查看当前栈层的信息frame,f 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句info frame, info f, 会打印出更为详细的当前栈层的信息
打印当前函数的参数名及其值info args
打印出当前函数中所有局部变量及其值info locals
打印出当前的函数中的异常处理信息info catch
设置符号(库)文件搜索路径的前缀set solib-absolute-prefix /mnt/test/lib只能有一个,它与 set sysroot等价
设置符号(库)文件搜索路径set solib-search-path /mnt/test/lib可以有多个,用":"隔开
设置环境变量set env LD_LIBRARY_PATH /tmp

参考

core文件如何分析
Linux中用gdb 查看代码堆栈的信息
solib-absolute-prefix 和solib-search-path的区别
gdb 查找动态库方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值