valgrind callgrind 使用

来源:互联网 发布:高性能mysql 第3版 编辑:程序博客网 时间:2024/06/06 18:39

        最近在linux环境下分析程序的性能,主要应用profile工具集。网上网罗了一些资料,按部就班的进行了一些实验,也得出了一些结果。

        其中,用到了valgrind中的memcheck、callgrind。实验了linux自带的gprof 与oprof。最终通过使用callgrind与gprof2dot结合使用,得出程序的调用次数与函数占比等关系图。

       以下分享下具体的步骤:

      1)首先是环境及工具准备。安装valgrind,下载gprof2dot.py 脚本 ,下载安装graphviz

       2)启动运行callgrind。 valgrind --tool=callgrind ./test

       3)运行完成后会当前目录下生成callgrind.out.***的文件

       4)运行gprof2dot.py -f callgrind callgrind.out.****|dot -Tpng -o report.png 在当前目录下生成report.png

report.png 就是我们希望得到的结果

                  下面写了个测试例子:  

int b(void) {  int i=0,g=0;  while(i++<400000)  {//    c();    g+=i;  }  return g;}int main(int argc, char** argv){   int iterations;   if(argc != 2)   {      printf("Usage %s <No of Iterations>\n", argv[0]);      return 0;   }   else      iterations = atoi(argv[1]);   printf("No of iterations = %d\n", iterations);   while(iterations--)   {      a();      b();         }}

        

         每个方框内部显示函数名称,函数整体包括内部子函数占用时间%比,函数自身,不包括内部子函数占用时间%比,函数执行次数。边表示父函数调用该子函数占用的时间%比,调用次数。从图中可以看出函数占用时间开销,调用次数等开发者。

原创粉丝点击