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

关于项目中的内存问题、死锁问题如何定位?——Valgrind

valgrind是如何实现的?

基于仿真方式
在实际处理器的基础上仿真一个虚拟处理器,使应用程序运行于这个虚拟处理器之上,从而进行监视分析。

core dump+内存问题定位:

1.无效指针(野指针)
2.内存泄漏(一般不会报错):申请了内存空间没有释放
2.指针越界(很难发现)
案例分析:用调试工具调试这个core 文件也能定位到代码行, 但是从对应行的代码看, 可能这行代码本身并没有什么问题, 它只是一个“被陷害者”。
1、当时的core文件并没有提供相关的信息。
2、出错的语句是一个赋值语句
3、使用valgrind分析以后发现有一个类内成员变量出现了越界。怀疑是数组越界访问导致被赋值变量的访问出现了问题

内存泄漏、越界可以用valgrind工具包的Memcheck工具进行定位
例如

valgrind --tool=tool_name program_name

一切对malloc()/free()/new/delete的调用都会被捕获。主要用于定位以下的问题
在这里插入图片描述

线程死锁问题定位

使用Valgrind中的Helgrind工具进行定位

valgrind --tool=helgrind ./dead_lock

core dump + gdb分析定位

如果编译的时候有调试信息-g,则可以直接用where来定位core dump位置
如果没有,则先用dt 指令查看core堆栈
f n指令进入对应堆栈
调用dissamble即可查看出现问题的位置
在这里插入图片描述


http://www.mrgr.cn/news/25080.html

相关文章:

  • 【工资计算 / 2】
  • Python爱心射线(完整代码)
  • GaussDB关键技术原理:高弹性(四)
  • 【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
  • Debezium数据同步基础概论
  • QtC++截图支持获取鼠标光标
  • 120张网络安全等保拓扑大全,零基础入门到精通,收藏这一篇就够了
  • audio耳麦拔插显示图标逻辑
  • Android 12 Launcher3 去掉Hotseat
  • 计算机深度:AI Agent - 通往AGI的核心基础
  • 【React源码解析】深入剖析Scheduler源码
  • 【课程系列12】某客时间AI大模型微调训练营
  • 数据结构C //线性表(链表)ADT结构及相关函数
  • 企业四要素核验是什么?如何应用
  • 函数题 6-2 多项式求值【PAT】
  • 3款数据恢复免费版软件评测:帮你轻松解决数据丢失问题
  • 代码设计:如何处理配置文件
  • 【阅读文献】一个使用大语言模型的端到端语音概要
  • 主导Instagram的10家企业
  • Java常见异常及Spring Validation框架详解