gprof是GNU組織下的一個比較有用的性能測試功能:函數
主要功能: 找出應用程序中消耗CPU時間最多的函數;工具
產生程序運行時的函數調用關係、調用次數性能
基本原理: 首先用戶要使用gprof工具,必須在GCC編譯該文件的選項中添加-pg選項,而後GCC會在用戶應用程序的每個函數中加入一個名爲mcount(或者是_mcount、__mcount,這依賴於編譯器或操做系統)的函數,即應用程序中每個函數都要調用mcount函數,而mcount函數使用後會在內存中保存函數調用圖,並經過函數調用堆棧的形式查找子函數和父函數的地址,這張調用圖也保存了全部與函數調用相關的調用時間、調用次數等信息。當應用程序執行完畢,會在當前目錄下產生gmon.out文件,gprof工具正是經過分析gmon.out文件才得出統計資料的。測試
使用gprof工具的主要格式:優化
gprof [選項] 用戶應用程序 gmon.outspa
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 輸出每一個函數的使用信息