cygwin環境下gprof+gprof2dot+dot生成函式關係結構圖
在linux環境下利用gcc/g++編譯連結程式碼的時候,加入-pg選項,在執行檔案後就會生成gmon.out,gmon.out記錄了函式在cpu執行的時間和被哪些函式呼叫的次數,關於gprof的使用和原理說明可以引數這兩篇文章《linux下的程式分析工具——gprof 》、《Linux效能評測工具之一:gprof篇》。步驟如下:
1.gcc -Wall -pg test.c -o test
2../test.exe (由於我是在windows環境下用cygwin的,所以生成有exe字尾)
3.gprof -b ./test.exe >report.txt
生成的flat profile和call graph如圖1。
圖1
從圖1中可以看出gprof生成的都是文字描述,我們可以利用gprof2dot.py指令碼把資料轉化成dot格式,再利用dot生成一張函式關係圖。
cygwin配置環境要求下:
1.安裝python。
2.gprof2dot.py(網上有得下載),下載後放在/bin/目錄就可以了。
3.安裝graphviz,直接搜尋graphviz,如圖2,然後安裝。
圖2
gprof2dot預設是部分函式呼叫圖,如果要顯示全部的函式呼叫關係,可以用gprof2dot -n0 -e0。預設的設定可以直接引數gprof2dot.py,截圖如圖3。
圖3
安裝好之後,執行如下命令:
gprof -b ./test.exe|gprof2dot.py |dot -Tpng -o test.png或者
python /bin/gprof2dot.py report.txt | dot -Tpng -o test.png
這就生成了一張函式關係圖了,如圖4。
圖4
以上都是今天下午的學習成果,總結了網上一些文章所說的和自己動手實踐成果。但是我一點都不懂graphviz和dot,這是值得我拓展的地方!