当前位置: 首页 > news >正文

利用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函数。

http://www.lryc.cn/news/391699.html

相关文章:

  • DVWA sql手注学习(巨详细不含sqlmap)
  • 代码随想录算法训练营第70天图论9[1]
  • 浏览器设计为默认
  • windows USB 设备驱动开发-USB设备描述符
  • 【踩坑】修复报错Cannot find DGL libdgl_sparse_pytorch_2.2.0.so
  • postman中参数和x-www-form-urlencoded传值的区别
  • 自己训练 PaddleOCR
  • 基于SpringBoot的地方废物回收机构管理系统
  • 跑腿平台小程序的设计
  • Java技术栈总结:Redis篇
  • django models对应的mysql类型
  • 2024攻防演练:亚信安全新一代WAF,关键时刻守护先锋
  • 富格林:曝光有效方案安全交易
  • ArtTS系统能力-窗口管理的学习(3.2)
  • C++ 运算符的优先级和关联性表
  • 正则表达式替换字符串的方法
  • 开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)
  • 2024/7/4总结
  • 【Android面试八股文】Looper如何在子线程中创建?
  • IT项目管理文档体系
  • ELK企业内部日志分析系统(1)
  • 反序列化POP链技术详解
  • process.env.VUE_APP_BASE_API
  • 面试题--SpirngCloud
  • 中位数贪心,3086. 拾起 K 个 1 需要的最少行动次数
  • xml_woarchive undefined symbol
  • SiCat:一款多功能漏洞利用管理与搜索工具
  • 毕业论文初稿写作方法与过程
  • SLAM 精度评估
  • Postman使用教程