GCC高階測試功能擴充套件——程式效能測試工具gprof、程式覆蓋測試工具gcov
很多年前將伺服器程式碼從Windows移植到Linux時,用過gprof進行過優化,非常有幫助。時隔多年,為了保留記憶,轉一下這篇文章。
gprof是GNU組織下的一個比較有用的效能測試功能:
主要功能: 找出應用程式中消耗CPU時間最多的函式;
產生程式執行時的函式呼叫關係、呼叫次數
基本原理: 首先使用者要使用gprof工具,必須在GCC編譯該檔案的選項中新增-pg選項,然後GCC會在使用者應用程式的每一個函式中加入一個名為mcount(或者是_mcount、__mcount,這依賴於編譯器或作業系統)的函式,即應用程式中每一個函式都要呼叫mcount函式,而mcount函式使用後會在記憶體中儲存函式呼叫圖,並通過函式呼叫堆疊的形式查詢子函式和父函式的地址,這張呼叫圖也儲存了所有與函式呼叫相關的呼叫時間、呼叫次數等資訊。當應用程式執行完畢,會在當前目錄下產生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