gprof使用介紹 gcc pg

2021-10-06 17:47:18 字數 1543 閱讀 6322

linux服務端程式設計,效能總是不可避免要思考的問題。

而單機(嚴格的說是單核)單執行緒程式(嚴格的說是邏輯)又是所有複雜應用的基礎。所以,這塊的效能是整個應用的基礎。

當遇到應用相應很慢的時候我們往往會疑問:這麼強勁的cpu到底在幹什麼,反應這麼慢。

滿足你!linux下常用的效能工具就是跟gcc一起的gprof。來個例子程式:

#include

#include

void f1()

}void f2()

}void f3()

}int main()

return 0;

}哈哈,好爛的程式啊。我們現在要通過gprof找出這個程式執行時cpu都用來幹什麼了。

要啟用gprof很簡單,gcc編譯的時候帶上-pg引數即可:

1gcc -g -pg test.c -o test

下面執行./test。執行完我們可以看到目錄下多了個gmon.out的檔案。這就是gprof的日誌,裡面記錄了程式執行cpu的使用資訊。開啟看看?杯具,二進位制檔案,我們人類看不懂。。。我們要執行下面的命令生成報表:

1gprof ./test gmon.out >report.txt

開啟report.txt,我們可以看到兩張表。

第一張:

flat profile:

each sample counts as 0.01 seconds.

% cumulative self self total

time seconds seconds calls ns/call ns/call name

56.25 0.32 0.32 1000000 315.00 315.00 f3

33.04 0.50 0.18 1000000 185.00 185.00 f2

10.71 0.56 0.06 1000000 60.00 60.00 f1

這就是每個函式占用cpu的時間以及百分比了。我們可以很明顯的看到f1()、f2()和f3()所用的時間關係。很準確。

第二張表式函式呼叫表,描述了函式呼叫的相互關係:

granularity: each sample hit covers 4 byte(s) for 1.79% of 0.56 seconds

0.32    0.00 1000000/1000000     main [1]
0.18    0.00 1000000/1000000     main [1]
0.06    0.00 1000000/1000000     main [1]
仔細看吧。

下面介紹個更給力的工具來生成報表(其實是圖)——gprof2dot:

接著上面的report.txt,執行下面命令:

gprof2dot report.txt > test.dot

dot -tpng -o test.png

第一句的意思是將報表轉化為dot檔案(graphviz 影象檔案格式)。第二句的意思是將這個檔案再轉為png格式。好吧現在用影象軟體開啟吧:

gprof使用介紹

gprof實際上只是乙個用於讀取profile結果檔案的工具。gprof採用混合方法來收集程式的統計資訊,他使用檢測方法,在編譯過程中在函式入口處插入計數器用於收集每個函式的被呼叫情況和被呼叫次數 也使用取樣方法,在執行時按一定間隔去檢查程式計數器並在分析時找出程式計數器對應的函式來統計函式占用的時...

gprof工具使用

gprof會精確的給出函式被呼叫的時間和次數,給出函式呼叫關係 gprof使用 1.在編譯和鏈結階段加入 pg 2.重新編譯 3.執行生成的可執行程式,在可執行程式當前目錄下生成gmon.out 4.用 gprof 工具分析 gmon.out 檔案 gprof gwcap gmon.out p p引...

程式分析工具gprof介紹

程式分析是以某種語言書寫的程式為物件,對其內部的運作流程進行分析。程式分析的目的主要有三點 一是通過程式內部各個模組之間的呼叫關係,整體上把握程式的執行流程,從而更好地理解程式,從中汲取有價值的內容。二是以系統優化為目的,通過對程式中關鍵函式的跟蹤或者執行時資訊的統計,找到系統效能的瓶頸,從而採取進...