1. 程式人生 > >GCC高階測試功能擴充套件——程式效能測試工具gprof、程式覆蓋測試工具gcov

GCC高階測試功能擴充套件——程式效能測試工具gprof、程式覆蓋測試工具gcov

很多年前將伺服器程式碼從Windows移植到Linux時,用過gprof進行過優化,非常有幫助。時隔多年,為了保留記憶,轉一下這篇文章。

gprof是GNU組織下的一個比較有用的效能測試功能:

  主要功能:   找出應用程式中消耗CPU時間最多的函式;

        產生程式執行時的函式呼叫關係、呼叫次數

  基本原理:   首先使用者要使用gprof工具,必須在GCC編譯該檔案的選項中新增-pg選項,然後GCC會在使用者應用程式的每一個函式中加入一個名為mcount(或者是_mcount、__mcount,這依賴於編譯器或作業系統)的函式,即應用程式中每一個函式都要呼叫mcount函式,而mcount函式使用後會在記憶體中儲存函式呼叫圖,並通過函式呼叫堆疊的形式查詢子函式和父函式的地址,這張呼叫圖也儲存了所有與函式呼叫相關的呼叫時間、呼叫次數等資訊。當應用程式執行完畢,會在當前目錄下產生gmon.out檔案

,gprof工具正是通過分析gmon.out檔案才得出統計資料的。

  使用gprof工具的主要格式:

    gprof  [選項]  使用者應用程式  gmon.out

  gprof命令選項:

    -b  不再輸出統計表格中的詳細資訊,僅顯示簡要資訊

    -p  只輸出函式的呼叫圖

    -i   輸出該統計總結資訊

    -T  以傳統的BSD格式列印輸出資訊

    -q  僅輸出函式的時間消耗列表

    -w width  設定輸出的寬度

    -e Name  不輸出函式Name以及其子函式的呼叫圖

    -f Name  輸出函式Name及其子函式的呼叫圖

    -z  顯示從未使用過的函式資訊

    -D  忽略函式中未知的變數

  gprof輸出資訊列表項解釋:

    name  函式名稱

    %time  函式使用佔全部時間的百分比

    cumulative seconds  函式累計執行的時間

    self seconds  函式本身執行的時間

    calls  函式被呼叫的次數

    self call  每次呼叫,花費在函式上的時間

    total call  每一次呼叫,花費在函式及其子函式的平均時間

  使用gprof的步驟(假設要分析程式為test.c的效能、函式呼叫情況及函式呼叫時間):

    (1)#gcc  -pg  -o  test  test.c

    (2)#./test

    (3)#gprof  -b  test  gmon.out

程式覆蓋測試工具gcov:

  gcov是GNU組織旗下的一個程式覆蓋測試工具。

  主要功能:  程式中哪部分程式碼沒有執行?

        哪部分程式碼執行效率最高?

        哪部分程式碼佔用CPU時間最長?

        哪部分程式碼消耗時間最短?

  使用建議:  使用gcov進行程式覆蓋性測試時,建議使用者不要在gcc編譯程式的命令中新增對程式碼的優化。

        同gprof一樣,gcov工具只能與GCC協同工作,而不能同其他的軟體配套使用

  使用步驟:(1)在GCC編譯時必須新增 -fprofile-arcs  -ftest-coverage 選項

       (2)執行編譯的可執行檔案

       (3)使用gcov命令分析程式碼執行的效率

  gcov執行 格式:

    gcov  [選項]  使用者程式

  gcov命令選項:

    -b  表示顯示對分支的測試資訊

    -h  顯示gcov的幫助資訊

    -v  顯示gcov的版本資訊

    -n  不建立gcov的輸出資訊

    -f  輸出每個函式的使用資訊

原文連結:http://www.cnblogs.com/nufangrensheng/archive/2013/11/16/3427192.html