Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1280455
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: C/C++

2008-03-02 15:55:39

啥是valgrind

    Valgrind是帮助程序员寻找程序里的bug和改进程序性能的工具。程序通过valgrind运行时,valgrind收集各种有用的信息,通过这些信息可以找到程序中潜在的bug和性能瓶颈。
    Valgrind现在提供多个工具,其中最重要的是Memcheck,Cachegrind,Massif和Callgrind。

Memcheck:

    这个工具可以用来寻找c、c++和fortran程序中内存管理的错误。写c或c++程序时,很多隐藏很深的bug是内存操作上出了问题。而这些在 Memcheck面前都无处遁形(偶当年用的就是这个功能)。Memcheck可以检查出下列几种内存操作上的错误(大家自查一下有没有犯过;):
  • 读写已经释放的内存
  • 读写内存块越界(从前或者从后)
  • 使用还未初始化的变量
  • 将无意义的参数传递给系统调用
  • 内存泄漏
  • (笔者补充一条,同一个malloc的内存块释放多次。当年这么个bug让我找翻天)      

Cachegrind:

    这个工具可以提供详尽的profiling信息。它不光对指令、内存访问进行计数,更能针对每条指令、每行源代码、每个函数和每个程序统计cache的不命中次数。大家应该知道,cache对目前系统的性能有决定性的影响。因此这些信息可以指导程序员调整代码,最大限度的提高程序性能。
    访谈中提到,valgrind自身利用该工具在过去几个月内使性能提高了25%-30%。据早先报道,kde的开发team也对valgrind在提高kde性能方面的帮助表示感谢。

Massif:

    Massif对内存的分配和释放做profile。程序开发者通过它可以深入了解程序的内存使用行为,从而对内存使用进行优化。这个功能对C++尤其有用(因为C++有很多隐藏的内存分配和释放)。

Callgrind:

    Callgrind是一个复杂的工具(复杂到笔者没看太明白有关它的介绍)。它基于Cachegrind,除了具有Cachegrind的功能外,还可以统计调用带来的开销。

用法:

    Valgrind使用起来非常简单,你甚至不需要重新编译你的程序就可以用它。当然如果要达到最好的效果,获得最准确的信息,还是需要按要求重新编译一下的。比如在使用memcheck的时候,最好关闭优化选项。

   

有点遗憾的是valgrind目前只支持x86、sparc等主流平台,当然,这对大多数情况已经足够了。那些认为可能用于arm的可以死心了,主要是用的虚拟技术的难点,而是不是用一个toolchain就可以解决问题。

阅读(1040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~