valgrind使用说明


1,memcheck
       (1),对未初始化内存的使用;
       (2),读/写释放后的内存块;
       (3)、读/写超出malloc分配的内存块;
       (4)、读/写不适当的栈中内存块;
       (5)、内存泄漏,指向一块内存的指针永远丢失;
       (6)、不正确的malloc/free或new/delete匹配;
       (7)、memcpy()相关函数中的dst和src指针重叠
    使用方法:
   valgrind --leak-check=full ./程序名
2,Callgrind
   类似于gprof一样的工具,Callgrind收集程序运行时的一些数据,建立函数调用关系图,还可以有选择地进行cache模拟
   Callgrind可以生成程序性能分析的图形,首先来说说程序性能分析的工具吧,通常可以使用gnu自带的gprof,它的使用方法是:在编译程序时添加-pg参数。
   例如:
   gcc -pg -o tmp tmp.c
   gprof使用方法:----
   gprof ./tmp | gprof2dot.py |dot -Tpng -o report.png
  
   借助graphviz-2.26.3.tar.gz工具可以绘制图形,内容包括调用关系,调用次数和图形。
   wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.26.3.tar.gz
  
   再来看 Callgrind的生成调用图过程吧,
   执行:valgrind --tool=callgrind ./tmp,-----------------单线程
         valgrind --tool=callgrind --separate-threads=yes ./tmp--------多线程
   执行完成后在目录下生成"callgrind.out.XXX"的文件这是分析文件,
   可以直接利用:callgrind_annotate callgrind.out.XXX 打印结果,
   也可以使用:[root@M-192-168-10-225 valgind]# ./gprof2dot.py -f callgrind callgrind.out.26829|dot -Tgif -o report.png 来生成图形化结果:
  
  
   下面是示例代码
    1 /*************************************************************************
                                 2     > File Name: callgrind.cpp
-  callgrind.cpp (/home/zhangt   3     > Author:zhangtx
|-   function                    4     > Mail: 18510665908@163.com
||     f                         5     > Created Time: 2015年10月24日 星期六 16时51分45秒
||     l1                        6  ************************************************************************/
||     l2                        7 #include<iostream>
||     main                      8 #include <stdio.h>
                                 9 #include <malloc.h>
   ~                            10 using namespace std;
   ~                            11 void f()                                                                                                                 
   ~                            12 {
   ~                            13     int i;
   ~                            14     for(i=0;i<1000000000;i++)
   ~                            15     {
   ~                            16         int count=0;
   ~                            17         count++;
   ~                            18     }
   ~                            19 }
   ~                            20
   ~                            21 void l2()
   ~                            22 {
   ~                            23     int count=0;
   ~                            24     for(int i=0;i<1000000000;i++)
   ~                            25         count=i*2;
   ~                            26     cout<<endl<<"l2"<<endl;
   ~                            27 }
   ~                            28 void l1()
   ~                            29 {
   ~                            30     cout<<endl<<"l1"<<endl;
   ~                            31     l2();
   ~                            32 }
   ~                            33 int main()
   ~                            34 {
   ~                            35     f();
   ~                            36     l1();
   ~                            37     printf("process is over!\n");
   ~                            38     return 0;
   ~                            39 }
   ~                            40
3.Cachegrind
    Cache分析器,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中。
 valgrind --tool=cachegrind 程序名,
4.Helgrind---多线程竞争条件检测
    它主要用来检查多线程程序中出现的竞争问题。Helgrind寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。
 Helgrind实现了名为“Eraser”的竞争检测算法,并做了进一步改进,减少了报告错误的次数。不过,Helgrind仍然处于实验阶段。
 valgrind --tool=helgrind ./test
 
5. Massif
    堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。
此外,lackey和nulgrind也会提供。Lackey是小型工具,很少用到;Nulgrind只是为开发者展示如何创建一个工具。我们就不做介绍了。
    示例:valgrind --tool=massif --stacks=yes ./test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值