利用coredump获取程序调用通路

一些前置知识

原文链接:https://blog.csdn.net/tenfyguo/article/details/8159176

一、什么是coredump

        我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。

        通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。


二、coredump文件的存储位置

   core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,大家可以通过下面的命令看到core文件的存在位置:

   cat  /proc/sys/kernel/core_pattern

   缺省值是core

三、快速获取调用通路

在需要产生coredump的位置加入会引起程序崩溃的代码,比如

int*p=NULL;
int a=*p;

在执行程序前执行命令

sudo echo '/var/crash/coredumps/core.%e.%p.%t'>/proc/sys/kernel/core_pattern
ulimit -c unlimited

执行代码,程序会崩溃退出,此时的coredump存储在/var/crash/coredumps下

执行gdb查看coredump文件

# gdb 可执行文件  coredump文件
# 比如
gdb /data/app /var/crash/coredumps/core.23342.435454

进入gdb后等待输入框出现,执行bt查看堆栈情况即可查看函数调用通路

#0 0x000002434ff in Func at /data/app/fun.cpp

…………

…………

#28 0x28282882828 in main at /data/app/main.cpp

#0是发生coredump的函数,#28(最后一个)是执行入口,一般是main函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想打球的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值