目前使用兩種 tool
(1) etrace
etrace 是根據 gcc 在下 -finstrument-function在 function 前後加入 code 。
使用分法要開兩個terminal 在同一資料夾下。
terminal A : ./etrace.pl prog
terminal B: ./prog
function 的 call graph 會在 terminal A 印出來,以下為官方的example :
\-- main
| \-- Crumble_make_apple_crumble
| | \-- Crumble_buy_stuff
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | \-- Crumble_prepare_apples
| | | \-- Crumble_skin_and_dice
| | \-- Crumble_mix
| | \-- Crumble_finalize
| | | \-- Crumble_put
| | | \-- Crumble_put
| | \-- Crumble_cook
| | | \-- Crumble_put
| | | \-- Crumble_bake
可以發現只有自己的application function 有印出,C library 的 function 及 crt0.o 等function 並沒有。
(2) valgrind,kcachegrind
以下為我下的參數
1. valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes --show-below-main=yes ./prog ( 會產生一個叫 callgrind.out.xxx )
2 kcachegrind callgrind.out
第2種方式可以印出很多資訊,我用這種profiling 去 trace program 開始執行到 main 做了什麼。相當不錯。
留言列表