gprof實際上只是乙個用於讀取profile結果檔案的工具。gprof採用混合方法來收集程式的統計資訊,他使用檢測方法,在編譯過程中在函式入口處插入計數器用於收集每個函式的被呼叫情況和被呼叫次數;也使用取樣方法,在執行時按一定間隔去檢查程式計數器並在分析時找出程式計數器對應的函式來統計函式占用的時間。
gprof具有以下優缺點:
1) 優點:
a) gnu工具,人手乙個;
b) 混合方法採集資訊。
2) 缺點:
a) 需要編譯選項支援:
i. 使用gcc/cc編譯和鏈結時需要加入-pg選項
ii. 使用ld鏈結時需要用/lib/gcrt0.o代替crt0.o作為第乙個input檔案
iii. 如果要除錯libc庫需要使用-lc_p代替-lc引數
b) 除錯多執行緒程式只能統計主線程的資訊(所以不能用於kingbase)。
使用gcc/cc編譯和鏈結時需要加入-pg選項
使用ld鏈結時需要用/lib/gcrt0.o代替crt0.o作為第乙個input檔案
如果要除錯libc庫需要使用-lc_p代替-lc引數
正常執行編譯好的程式,程式正常結束後會在當前目錄生成統計資訊檔案gmon.out。
程式必須正常退出(呼叫exit或從main中返回)才能生成統計資訊。
當前目錄下如果有另外叫gmon.out的檔案,內容將被本次執行生成的統計資訊覆蓋,多次執行統一程式請將前一次的gmon.out改名。
命令格式:
gprof options [executable-file [profile-data-files...]] [> outfile]
常用引數介紹:
symspec表示需要加入或排除的函式名,和gdb指定斷點時的格式相同。
1) 輸出相關:
a) -a[symspec]或--annotated-source[=symspec]:進行原始碼關聯,只關聯symspec指定的函式,不指定為全部關聯。
b) -i dirs或--directory-path=dirs:新增搜尋原始碼的資料夾,修改環境變數gprof_path也可以。
c) -p[symspec]或--flat-profile[=symspec]:預設選項,輸出統計資訊,只統計symspec指定的函式,不指定為全部統計。
d) -p[symspec]或--no-flat-profile[=symspec]:排除統計symspec指定的函式
e) -q[symspec]或--graph[=symspec]:預設選項,輸出函式呼叫資訊,只統計symspec指定的函式,不指定為全部統計。
f) -q[symspec]或--no-graph[=symspec]:排除統計symspec指定的函式
g) -b或--brief:不輸出對各個引數含義的解釋;
2) 分析相關:
a) -a或--no-static:定義為static的函式將不顯示,函式的被呼叫次數將被計算在呼叫它的不是static的函式中;
b) -m num或--min-count=num:不顯示被呼叫次數小於num的函式;
c) -z或--display-unused-functions:顯示沒有被呼叫的函式;
編譯測試檔案:
gcc –g –o test test.c –pg
執行程式:
./test
檢視統計資訊:
gprof -b -a -p -q test gmon.out > pg
1.4 結論
我們可以使用程式概要分析快速的找到乙個程式裡面值得優化的地方。
gprof使用介紹 gcc pg
linux服務端程式設計,效能總是不可避免要思考的問題。而單機 嚴格的說是單核 單執行緒程式 嚴格的說是邏輯 又是所有複雜應用的基礎。所以,這塊的效能是整個應用的基礎。當遇到應用相應很慢的時候我們往往會疑問 這麼強勁的cpu到底在幹什麼,反應這麼慢。滿足你!linux下常用的效能工具就是跟gcc一起...
gprof工具使用
gprof會精確的給出函式被呼叫的時間和次數,給出函式呼叫關係 gprof使用 1.在編譯和鏈結階段加入 pg 2.重新編譯 3.執行生成的可執行程式,在可執行程式當前目錄下生成gmon.out 4.用 gprof 工具分析 gmon.out 檔案 gprof gwcap gmon.out p p引...
程式分析工具gprof介紹
程式分析是以某種語言書寫的程式為物件,對其內部的運作流程進行分析。程式分析的目的主要有三點 一是通過程式內部各個模組之間的呼叫關係,整體上把握程式的執行流程,從而更好地理解程式,從中汲取有價值的內容。二是以系統優化為目的,通過對程式中關鍵函式的跟蹤或者執行時資訊的統計,找到系統效能的瓶頸,從而採取進...