valgrind工具

来源:互联网 发布:家用电脑主机 知乎 编辑:程序博客网 时间:2024/05/02 04:53
     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。