valgrind工具

     valgrind提供了一个用于编写动态分析工具的框架。该框架目前已经实现了一些标准的动态分析工具,包括:
  • MemCheck, 用于检测内存错误。
  • Cachegrind, 用于分析cache和分支预测情况。
  • Callgrind, 可以用于交互式地分析函数的动态调用过程。
  • Helgrind和DRD, 用于检测线程错误。
  • Massif和DHAT, 用于分析堆的使用。
  • Ptrcheck,用于检测heap、stack和全局数组的overflow。
  • BBV,是一个类似SimPoint的分析工具,可以辅助系统体系结构的研究。
   先试图猜一下各种工具的实现思路,等以后有机会看过源码, 再来纠正。
  1. MemCheck
      内存错误包括,数组越界访问,段错误等。除了内存错误以外,常见的问题还包括内存泄漏。内存相关问题大部分是由于寻址引起的,而指针类型作为能够修改地址,因而经常是很多内存问题的根源。指针相关地问题,包括访问未初始化指针,指针运算越界,内存泄漏等。
      检测数组越界,应该可以通过在数组访问前,将数组索引变量的值与数组定义时的长度进行比较来实现。
      检测段错误,应该可以通过段的属性标志来部分实现。
      检测访问未初始化指针,应该用静态分析方法。
      检测内存泄漏,应该是访问堆管理器的接口实现。
2. Cachegrind
      分支预测情况,可以通过访问相关的硬件计数器实现。
      cache的命中情况,也可以通过访问相应的硬件计数器实现。
3. Callgrind
      函数的调用过程,可以通过访问活跃记录的链接来实现。
4. 指令和数据profiling
      可以在执行每条指令前,打印出当前地IP值得到指令的逻辑地址profiling。如果要得到指令的物理地址的profiling,则需要访问TLB——对TLB接口尚无概念。如何得到数据的逻辑地址?如果要得到数据的物理地址profiling,则同样要访问TLB。
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值