valgrind callgrind 使用

        最近在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();
      
   }
}

        

         每個方框內部顯示函數名稱,函數整體包括內部子函數佔用時間%比,函數自身,不包括內部子函數佔用時間%比,函數執行次數。邊表示父函數調用該子函數佔用的時間%比,調用次數。從圖中可以看出函數佔用時間開銷,調用次數等開發者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章