锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓銆丟Profile綆浠?/p>
GProfile鏄痝cc鐨勪竴涓伐鍏鳳紝鐢ㄤ簬瀵瑰簲鐢ㄧ▼搴忕殑嫻嬭瘯銆?/p>
GProfile鍙互鍒嗘瀽鍑哄嚱鏁扮殑璋冪敤嬈℃暟銆佸嚱鏁扮殑璋冪敤鍏崇郴浠ュ強鍑芥暟娑堣楃殑鏃墮棿銆?/p>
浜屻丟Profile鍘熺悊 鍦ㄧ紪璇戝拰閾炬帴浣犵殑紼嬪簭鐨勬椂鍊欙紝gcc 鍦ㄤ綘搴旂敤紼嬪簭鐨勬瘡涓嚱鏁頒腑閮藉姞鍏ヤ簡涓涓悕涓簃count ( or "_mcount" , or "__mcount" , 渚濊禆浜庣紪璇戝櫒鎴栨搷浣滅郴緇?鐨勫嚱鏁幫紝涔熷氨鏄浣犵殑搴旂敤紼嬪簭閲岀殑姣忎竴涓嚱鏁伴兘浼?xì)璋冪敤mcount, 鑰宮count 浼?xì)鍦ㄥ唴瀛樹腑淇濆瓨涓寮犲嚱鏁拌皟鐢ㄥ浘錛屽茍閫氳繃鍑芥暟璋冪敤鍫嗘爤鐨勫艦寮忔煡鎵懼瓙鍑芥暟鍜岀埗鍑芥暟鐨勫湴鍧銆傝繖寮犺皟鐢ㄥ浘涔熶繚瀛樹簡鎵鏈変笌鍑芥暟鐩稿叧鐨勮皟鐢ㄦ椂闂達紝璋冪敤嬈℃暟絳夌瓑鐨勬墍鏈変俊鎭?nbsp; 紼嬪簭榪愯緇撴潫鍚庯紝浼?xì)鍦ńE嬪簭閫鍑虹殑璺緞涓嬬敓鎴愪竴涓?/span>gmon.out鏂囦歡錛岀敤鏉ヤ繚瀛樼洃鎺ф暟鎹備粠鑰?/span>閫氳繃gprof鏉ヨВ璇繪暟鎹紼嬪簭榪涜鍒嗘瀽銆?/span> 涓夈丟Profile鐢ㄦ硶 1銆佸湪緙栬瘧鏃跺姞鍏ュ弬鏁?-pg灝卞彲浠ユ墦寮GProfile鐨勫紑鍏熾?/span> 2銆?span style="color: rgb(75,78,81)">gprof鍙煡鐪嬬敤鎴峰嚱鏁頒俊鎭紝涓嶈兘瀵瑰簱鍑芥暟榪涜鏌ョ湅銆?/span> 濡傛灉鎯蟲煡鐪嬪簱鍑芥暟鐨勪俊鎭紝鍦ㄧ紪璇戞椂鍔犲叆"-lc_p"緙栬瘧鍙傛暟浠f浛"-lc"緙栬瘧鍙傛暟錛岃繖鏍風(fēng)▼搴忎細(xì)閾炬帴libc_p.a搴擄紝灝卞彲浠ユ煡鐪嬪簱鍑芥暟鐨勪俊鎭簡銆?nbsp; 鍥涖丟Profile涓句緥 浜斻丟Profile瀵逛簬緇撴灉鐨勫垎鏋?/p>
-b 涓嶅啀杈撳嚭緇熻鍥捐〃涓瘡涓瓧孌電殑璇︾粏鎻忚堪銆?nbsp; GProfile鐨勮緇嗚鍙傝冿細(xì)http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html 榪欎釜鏂囨。瀵笹Profile璇寸殑寰堣緇嗭紝寰堝ソ銆?/p> 鍦ㄧ綉涓婃壘浜嗘壘鍏充簬Progfile鐨勫伐鍏鳳紝鎵懼埌浜嗚繖綃囨枃绔犺寰椾笉閿欙紝杞潵鍒嗕韓涓嬨傚鍘熸枃淇敼浜嗕笅銆?br /> 鏈枃浠嬬粛浜嗗浣曚嬌鐢℅nu gprof 瀵筁inux騫沖彴涓嬬殑鐜版湁紼嬪簭榪涜浼樺寲鍒嗘瀽鍜岀敓鎴愮▼搴忚皟鐢ㄥ浘銆備富瑕佸亸閲嶄簬瀵圭敓鎴愬拰浣跨敤嫻佺▼鍥句綔浠嬬粛. Gprof 瀹炵幇鍘熺悊錛?/strong> Gprof鍩烘湰鐢ㄦ硶錛?/em> 2錛?鎵ц浣犵殑搴旂敤紼嬪簭浣夸箣鐢熸垚渚沢prof 鍒嗘瀽鐨勬暟鎹?/p>
3錛?浣跨敤gprof 紼嬪簭鍒嗘瀽浣犵殑搴旂敤紼嬪簭鐢熸垚鐨勬暟鎹?/p>
Gprof 綆鍗曚嬌鐢細(xì) 2錛庢墽琛屼綘鐨勫簲鐢ㄧ▼搴忎嬌涔嬬敓鎴愪緵gprof 鍒嗘瀽鐨勬暟鎹?nbsp; 鍛戒護琛岄噷闈㈣緭鍏? 浣犱細(xì)鍦ㄥ綋鍓嶇洰褰曚笅鐪嬪埌涓涓猤mon.out 鏂囦歡錛?榪欎釜鏂囦歡灝辨槸渚沢prof 鍒嗘瀽浣跨敤鐨勩? 3錛庝嬌鐢╣prof 紼嬪簭鍒嗘瀽浣犵殑搴旂敤紼嬪簭鐢熸垚鐨勬暟鎹?br />鍛戒護琛岄噷闈㈣緭鍏? 鐢變簬gprof杈撳嚭鐨勪俊鎭瘮杈冨錛岃繖閲屼嬌鐢ㄤ簡 less 鍛戒護錛岃鍛戒護鍙互璁╂垜浠氳繃涓婁笅鏂瑰悜閿煡鐪媑prof浜х敓鐨勮緭鍑猴紝| 琛ㄧずgprof -b a.out gmon.out 鐨勮緭鍑轟綔涓?less鐨勮緭鍏ャ備笅闈㈡槸鎴戜粠gprof杈撳嚭涓憳鎶勫嚭鐨勪笌鎴戜滑鏈夊叧鐨勪竴浜涜緇嗕俊鎭?/p>
浠庝笂闈㈢殑杈撳嚭鎴戜滑鑳芥槑鏄劇殑鐪嬪嚭鏉ワ紝main 璋冪敤浜?b 鍑芥暟錛?鑰宐 鍑芥暟鍒嗗埆璋冪敤浜哸 鍜?c 鍑芥暟銆傜敱浜庢垜浠殑鍑芥暟鍙槸綆鍗曠殑杈撳嚭浜嗕竴涓瓧涓詫紝鏁呮瘡涓嚱鏁扮殑娑堣楁椂闂撮兘鏄? 縐掋? -b涓嶅啀杈撳嚭緇熻鍥捐〃涓瘡涓瓧孌電殑璇︾粏鎻忚堪銆? -p 鍙緭鍑哄嚱鏁扮殑璋冪敤鍥撅紙Call graph 鐨勯偅閮ㄥ垎淇℃伅錛夈?/p>
-q 鍙緭鍑哄嚱鏁扮殑鏃墮棿娑堣楀垪琛ㄣ?/p>
-E Name涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝姝ゆ爣蹇楃被浼間簬 -e 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂寸殑璁$畻涓帓闄や簡鐢卞嚱鏁癗ame 鍙婂叾瀛愬嚱鏁版墍鐢ㄧ殑鏃墮棿銆?/p>
-e Name 涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紙闄ら潪瀹冧滑鏈夋湭琚檺鍒剁殑鍏跺畠鐖跺嚱鏁幫級銆傚彲浠ョ粰瀹氬涓?-e 鏍囧織銆備竴涓?-e 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般? -F Name 杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝瀹冪被浼間簬 -f 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂磋綆椾腑浠呬嬌鐢ㄦ墍鎵撳嵃鐨勪緥紼嬬殑鏃墮棿銆傚彲浠ユ寚瀹氬涓?-F 鏍囧織銆備竴涓?-F 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?F 鏍囧織瑕嗙洊 -E 鏍囧織銆? -f Name杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥俱傚彲浠ユ寚瀹氬涓?-f 鏍囧織銆備竴涓?-f 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般? -z 鏄劇ず浣跨敤嬈℃暟涓洪浂鐨勪緥紼嬶紙鎸夌収璋冪敤璁℃暟鍜岀瘡縐椂闂磋綆楋級銆?/p>
鍒拌繖涓烘浣犲彲鑳藉gprof 鏈変簡涓涓瘮杈冩劅鎬х殑璁よ瘑浜嗭紝浣犲彲鑳戒細(xì)闂浣曠敤瀹冨幓鍒嗘瀽涓涓湡姝g殑Open Source 鍛紒涓嬮潰灝辮鎴戜滑鍘葷敤gprof鍘誨垎鏋愪竴涓狾pen Source錛岀湅鐪嬪浣曞幓鍦ㄧ湡瀹炵殑鐜涓嬌鐢ㄥ畠銆?/p>
浣跨敤Gprof 鍒嗘瀽 Cflow寮婧愰」鐩?/strong> 鍋囪浣犲凡緇忎笅杞戒簡璇ユ簮浠g爜錛坈flow-1.1.tar.gz錛?騫舵妸瀹冩斁緗湪/home鐩綍涓嬶紝璁╂垜浠湅鐪嬪浣曞湪榪欎釜搴旂敤涓婁嬌鐢╣prof銆? 1錛?nbsp;浣跨敤 -pg 緙栬瘧鍜岄摼鎺ヨ搴旂敤紼嬪簭,璇瘋緭鍏ヤ笅鍒楀懡浠ゃ?/p>
濡傛灉娌℃湁鍑洪敊浣犱細(xì)鍦?home/cflow-1.1/src 鐩綍涓嬪彂琛屼竴涓悕涓篶flow鐨勫彲鎵ц鏂囦歡錛岃繖灝辨槸鎴戜滑鍔犲叆-pg緙栬瘧閫夐」鍚庣紪璇戝嚭鏉ョ殑鍙互浜х敓渚沢prof鎻愬彇淇℃伅鐨勫彲鎵ц鏂囦歡銆?strong>璁頒綇涓瀹氳鍦ㄧ紪璇戝拰閾炬帴鐨勬椂鍊欓兘浣跨敤-pg閫夐」 2錛?nbsp;榪愯cflow 紼嬪簭浣夸箣鐢熸垚gmon.out 鏂囦歡渚沢prof浣跨敤銆? 鏌ョ湅/home/cflow-1.1/src鐩綍涓嬫湁娌℃湁浜х敓gmon.out鏂囦歡錛屽鏋滄病鏈夎閲嶅絎竴姝ワ紝騫剁‘璁や綘宸茬粡鍦ㄧ紪璇戝拰閾炬帴紼嬪簭鐨勬椂鍊欎嬌鐢ㄤ簡-pg 閫夐」銆侰flow鐨勪嬌鐢ㄨ鍙傝?a >http://www.gnu.org/software/cflow/manual/cflow.html銆? 3錛?nbsp;浣跨敤gprof鍒嗘瀽紼嬪簭 % cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 118262 0.00 0.00 include_symbol
0.00 0.00 0.00 92896 0.00 0.00 is_printable
0.00 0.00 0.00 28704 0.00 0.00 set_level_mark
0.00 0.00 0.00 28703 0.00 0.00 is_last
0.00 0.00 0.00 19615 0.00 0.00 auto_processor
0.00 0.00 0.00 15494 0.00 0.00 gnu_output_handler
0.00 0.00 0.00 12286 0.00 0.00 delete_parm_processor
0.00 0.00 0.00 7728 0.00 0.00 newline
0.00 0.00 0.00 7728 0.00 0.00 print_function_name
0.00 0.00 0.00 7728 0.00 0.00 print_level 銆傘傘傘傘傘?
銆傘傘傘傘傘?/p> Call graph granularity: each sample hit covers 4 byte(s) no time propagated index % time self children called name
[1] 0.0 0.00 0.00 79+855 [1]
0.00 0.00 166 dcl [52]
0.00 0.00 163 parse_dcl [53]
0.00 0.00 150 dirdcl [56]
0.00 0.00 129 parse_declaration [63]
0.00 0.00 98 parse_variable_declaration [66]
0.00 0.00 63 maybe_parm_list [69]
0.00 0.00 63 parse_function_declaration [70]
0.00 0.00 39 func_body [74] 銆傘傘傘傘傘?
銆傘傘傘傘傘?/p> 閫氳繃鍒嗘瀽錛卼ime浣犲氨鐭ラ亾浜嗛偅涓嚱鏁版秷鑰楃殑鏃墮棿鏈澶氾紝浣犲彲浠ユ牴鎹繖涓緭鍑轟俊鎭仛鏈夌洰鐨勭殑浼樺寲錛屼笉榪嘽flow鎵ц鐨勯熷害鏄湪鏄お蹇簡錛屼互鑷籌紖time閮芥槸0 (娑堣楁椂闂存槸浠ョ涓哄崟浣嶈繘琛岀粺璁$殑)銆? 鐢熸垚鍥懼艦鍖栫殑鍑芥暟璋冪敤鍥?/strong> 1錛嶨raphviz 宸ュ叿 浣跨敤 Dot 璇█錛屼綘鍙互鎸囧畾涓夌瀵硅薄錛氬浘銆佽妭鐐瑰拰杈廣備負(fù)浜嗚浣犵悊瑙h繖浜涘璞$殑鍚箟錛屾垜灝嗘瀯寤轟竴涓緥瀛愭潵灞曠ず榪欎簺鍏冪礌鐨勭敤娉曘?/p>
瑕佸皢榪欎釜 .dot 鏂囦歡杞崲鎴愪竴涓浘褰㈡槧鍍忥紝鍒欓渶瑕佷嬌鐢?Dot 宸ュ叿錛岃繖涓伐鍏鋒槸鍦?Graphviz 鍖呬腑鎻愪緵鐨勩傛竻鍗?6 浠嬬粛浜嗚繖縐嶈漿鎹€?br />娓呭崟 6. 浣跨敤 Dot 鏉ュ垱寤?JPG 鏄犲儚 Dot鍒涘緩鐨勫疄渚嬪浘 Dot 璇█榪樺彲浠ユ敮鎸佸叾浠栦竴浜涢夐」錛屽寘鎷褰€侀鑹插拰寰堝灞炴с傛湁鍏磋叮鍙互鏌ョ湅graphviz鐩稿叧鏂囨。銆?br />2錛庝粠gprof鐨勮緭鍑轟腑鎻愬彇璋冪敤鍥句俊鎭紝浜х敓鍙緵Graphviz浣跨敤鐨刣ot鏂囦歡銆?br />榪欐牱鐨勮剼鏈湁浜哄凡緇忓疄鐜頒簡錛屾垜浠彧瑕佷笅杞戒竴涓幇鎴愮殑灝卞彲浠ヤ簡錛岄鍏堜粠http://www.ioplex.com/~miallen/ 緗戠珯涓嬭澆涓涓猰kgraph鑴氭湰銆傝В鍘嬭鑴氭湰鍒板寘鍚玤mon.out鏂囦歡鐨勭洰褰曚笅銆備嬌鐢╩kgraph0.sh浜х敓璋冪敤鐨刯pg鍥懼儚鏂囦歡銆備緥濡傦細(xì)浣跨敤涓婇潰鐨勪緥瀛愶紝鐢熸垚cflow鐨勮皟鐢ㄥ浘銆?br />[linux /home/cflow-1.1/src]$ mkgraph0.sh cflow gmon.out 鎬葷粨錛?/strong> 鐩稿叧璧勬枡錛?/strong> 鍘熸枃鍦板潃錛?a >鐐瑰嚮鎵撳紑閾炬帴http://os.51cto.com/art/200703/41426_2.htm
銆銆3銆?gprof鍙兘鍦ㄧ▼搴忔甯哥粨鏉熼鍑轟箣鍚庢墠鑳界敓鎴愮▼搴忔祴璇勬姤鍛婏紝鍘熷洜鏄痝prof閫氳繃鍦╝texit()閲屾敞鍐屼簡涓涓嚱鏁版潵浜х敓緇撴灉淇℃伅錛屼換浣曢潪姝e父閫鍑洪兘涓嶄細(xì)鎵цatexit()鐨勫姩浣滐紝鎵浠ヤ笉浼?xì)漶旂敓gmon.out鏂囦歡銆傚鏋滀綘鐨勭▼搴忔槸涓涓笉浼?xì)閫鍑虹殑鏈嶅姟紼嬪簭錛岄偅灝卞彧鏈変慨鏀逛唬鐮佹潵杈懼埌鐩殑銆傚鏋滀笉鎯蟲敼鍙樼▼搴忕殑榪愯鏂瑰紡錛屽彲浠ユ坊鍔犱竴涓俊鍙峰鐞嗗嚱鏁拌В鍐抽棶棰橈紙榪欐牱瀵逛唬鐮佷慨鏀規(guī)渶灝戯級錛屼緥濡傦細(xì)
銆銆static void sighandler( int sig_no )
銆銆{
銆銆exit(0);
銆銆}
銆銆signal( SIGUSR1, sighandler )錛?nbsp;
銆銆褰撲嬌鐢╧ill -USR1 pid 鍚庯紝紼嬪簭閫鍑猴紝鐢熸垚gmon.out鏂囦歡銆?nbsp;
#include <stdio.h> 
int ppp(int a) 
{ 
int i, b; 
b = 0; 
for(i = 0; i<1000000; i++) { 
b++; 
} 
return 0; 
} 


int prime(int n) 
{ 
int i, j, b; 
b = 0; 
for(i=2; i<n; i++) { 
for(j = 0; j<1000000; j++) { 
b++; 
} 
if(n%i == 0) 
return 0; 
return 1; 
} 
} 


int main(void) 
{ 
int i, n; 
n = 1000; 
for(i=2; i<=n; i++) { 
if(prime(i)) { 
ppp(i); 
} 
} 
return 0; 
} 
銆銆-p 鍙緭鍑哄嚱鏁扮殑璋冪敤鍥撅紙Call graph鐨勯偅閮ㄥ垎淇℃伅錛夈?nbsp;
銆銆-q 鍙緭鍑哄嚱鏁扮殑鏃墮棿娑堣楀垪琛ㄣ?nbsp;
銆銆-e Name 涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紙闄ら潪瀹冧滑鏈夋湭琚檺鍒剁殑鍏跺畠鐖跺嚱鏁幫級銆傚彲浠ョ粰瀹氬涓?-e 鏍囧織銆備竴涓?-e 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?nbsp;
銆銆-E Name 涓嶅啀杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝姝ゆ爣蹇楃被浼間簬 -e 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂寸殑璁$畻涓帓闄や簡鐢卞嚱鏁癗ame 鍙婂叾瀛愬嚱鏁版墍鐢ㄧ殑鏃墮棿銆?nbsp;
銆銆-f Name 杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥俱傚彲浠ユ寚瀹氬涓?-f 鏍囧織銆備竴涓?-f 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?nbsp;
銆銆-F Name 杈撳嚭鍑芥暟Name 鍙婂叾瀛愬嚱鏁扮殑璋冪敤鍥撅紝瀹冪被浼間簬 -f 鏍囧織錛屼絾瀹冨湪鎬繪椂闂村拰鐧懼垎姣旀椂闂磋綆椾腑浠呬嬌鐢ㄦ墍鎵撳嵃鐨勪緥紼嬬殑鏃墮棿銆傚彲浠ユ寚瀹氬涓?-F 鏍囧織銆備竴涓?-F 鏍囧織鍙兘鎸囧畾涓涓嚱鏁般?F 鏍囧織瑕嗙洊 -E 鏍囧織銆?nbsp;
銆銆-z 鏄劇ず浣跨敤嬈℃暟涓洪浂鐨勪緥紼嬶紙鎸夌収璋冪敤璁℃暟鍜岀瘡縐椂闂磋綆楋級銆?nbsp;
Gprof鍔熻兘錛氭墦鍗板嚭紼嬪簭榪愯涓悇涓嚱鏁版秷鑰楃殑鏃墮棿錛屽彲浠ュ府鍔╃▼搴忓憳鎵懼嚭浼楀鍑芥暟涓楁椂鏈澶氱殑鍑芥暟銆備駭鐢熺▼搴忚繍琛屾椂鍊欑殑鍑芥暟璋冪敤鍏崇郴錛屽寘鎷皟鐢ㄦ鏁幫紝鍙互甯姪紼嬪簭鍛樺垎鏋愮▼搴忕殑榪愯嫻佺▼銆?br />鏈変簡鍑芥暟鐨勮皟鐢ㄥ叧緋伙紝榪欎細(xì)璁╁紑鍙戜漢鍛樺ぇ澶ф彁楂樺伐浣滄晥鐜囷紝涓嶇敤璐瑰績鍦板幓涓鐐圭偣鎵懼嚭紼嬪簭鐨勮繍琛屾祦紼嬶紝榪欏灝忕▼搴忔潵璇村彲鑳芥晥鏋滀笉鏄緢鏄庢樉錛屼絾瀵逛簬鏈夊嚑涓囷紝鍑犲崄涓囦唬鐮侀噺鐨勫伐紼嬫潵璇達紝鏁堢巼鏄瘚搴哥疆鐤戠殑錛佽屼笖榪欎釜鍔熻兘瀵逛簬緇存姢鏃т唬鐮佹垨鑰呮槸鍒嗘瀽Open Source鏉ヨ閭f槸鐩稿綋璇變漢鐨勶紝鏈変簡璋冪敤鍥撅紝瀵圭▼搴忕殑榪愯妗嗘灦涔熷氨鏈変簡涓涓ぇ浣撲簡瑙o紝鐭ラ亾浜嗙▼搴忕殑“楠ㄦ灦“錛屽垎鏋愬畠涔熷氨涓嶄細(xì)鍐嶉偅涔堣尗鐒訛紝灝ゅ叾鏄鑷繁涓嶇啛鎮(zhèn)夌殑浠g爜鍜孫pen Source銆傝垂璇濅笉澶氳浜嗭紝璁╂垜浠紑濮嬫垜浠殑鍒嗘瀽涔嬫梾鍚э紒
閫氳繃鍦ㄧ紪璇戝拰閾炬帴浣犵殑紼嬪簭鐨勬椂鍊欙紙浣跨敤 -pg 緙栬瘧鍜岄摼鎺ラ夐」錛夛紝gcc 鍦ㄤ綘搴旂敤紼嬪簭鐨勬瘡涓嚱鏁頒腑閮藉姞鍏ヤ簡涓涓悕涓簃count ( or “_mcount” , or “__mcount” , 渚濊禆浜庣紪璇戝櫒鎴栨搷浣滅郴緇?鐨勫嚱鏁幫紝涔熷氨鏄浣犵殑搴旂敤紼嬪簭閲岀殑姣忎竴涓嚱鏁伴兘浼?xì)璋冪敤mcount, 鑰宮count 浼?xì)鍦ㄥ唴瀛樹腑淇濆瓨涓寮犲嚱鏁拌皟鐢ㄥ浘錛屽茍閫氳繃鍑芥暟璋冪敤鍫嗘爤鐨勫艦寮忔煡鎵懼瓙鍑芥暟鍜岀埗鍑芥暟鐨勫湴鍧銆傝繖寮犺皟鐢ㄥ浘涔熶繚瀛樹簡鎵鏈変笌鍑芥暟鐩稿叧鐨勮皟鐢ㄦ椂闂達紝璋冪敤嬈℃暟絳夌瓑鐨勬墍鏈変俊鎭?/p>
1錛?浣跨敤 -pg 緙栬瘧鍜岄摼鎺ヤ綘鐨勫簲鐢ㄧ▼搴忋?/p>
璁╂垜浠畝鍗曠殑涓句釜渚嬪瓙鏉ョ湅鐪婫prof鏄浣曚嬌鐢ㄧ殑銆?/p>1錛庢墦寮linux緇堢銆傛柊寤轟竴涓猼est.c鏂囦歡錛屽茍鐢熺敤-pg 緙栬瘧鍜岄摼鎺ヨ鏂囦歡銆?test.c 鏂囦歡鍐呭濡備笅錛?
#include "stdio.h"
#include "stdlib.h"
void a()
{
printf("\t\t+---call a() function\n");
}
void c()
{
printf("\t\t+---call c() function\n");
}
int b()
{
printf("\t+--- call b() function\n");
a();
c();
return 0;
}
int main()
{
printf(" main() function()\n");
b();
}
鍛戒護琛岄噷闈㈣緭鍏ヤ笅闈㈠懡浠わ紝娌″姞-c閫夐」錛実cc 浼?xì)榛樿杩涜缂栬瘧迤堥摼鎺ョ敓鎴恆.out錛?
$gcc -pg test.c
濡傛灉娌℃湁緙栬瘧閿欒錛実cc浼?xì)鍦ㄥ綋鍓嶇洰褰曚笅鐢熸垚涓涓猘.out鏂囦歡錛屽綋鐒朵綘涔熷彲浠ヤ嬌鐢?–o 閫夐」緇欑敓鎴愮殑鏂囦歡璧蜂竴涓埆鐨勫悕瀛楋紝鍍?gcc –pg test.c –o test , 鍒檊cc浼?xì)鐢熸垚涓涓悕涓簍est鐨勫彲鎵ц鏂囦歡,鍦ㄥ懡浠よ涓嬭緭鍏linux /home/test]$./test , 灝卞彲浠ユ墽琛岃紼嬪簭浜嗭紝璁頒綇涓瀹氳鍔犱笂 ./ 鍚﹀垯紼嬪簭鐪嬩笂鍘誨彲鑳芥槸鎵ц錛屽彲鏄粈涔堣緭鍑洪兘娌℃湁銆?
[linux /home/test]$a.out
main() function()
+--- call b() function
+---call a() function
+---call c() function
$ gprof -b a.out gmon.out | less
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1 0.00 0.00 a
0.00 0.00 0.00 1 0.00 0.00 b
0.00 0.00 0.00 1 0.00 0.00 c
Call graph
granularity: each sample hit covers 4 byte(s) no time propagated
index % time self children called name
0.00 0.00 1/1 b [2]
[1] 0.0 0.00 0.00 1 a [1]
-----------------------------------------------
0.00 0.00 1/1 main [10]
[2] 0.0 0.00 0.00 1 b [2]
0.00 0.00 1/1 a [1]
0.00 0.00 1/1 c [3]
-----------------------------------------------
0.00 0.00 1/1 b [2]
[3] 0.0 0.00 0.00 1 c [3]
甯哥敤鐨凣prof 鍛戒護閫夐」瑙i噴錛?/strong>
CFlow 鏄▼搴忔祦紼嬪垎鏋愬伐鍏鳳紝璇ュ伐鍏峰彲浠ラ氳繃鍒嗘瀽C婧愪唬鐮侊紝浜х敓紼嬪簭璋冪敤鍥撅紒鏈夌偣璺烥prof宸笉澶氾紝涓嶈繃CFlow鏄氳繃婧愪唬鐮佽繘琛岀殑闈欐佸垎鏋愬茍涓?涓嶈兘鍒嗘瀽C++ 紼嬪簭,浣犲彲浠ュ埌http://www.gnu.org/software/cflow/鍘諱笅杞芥簮浠g爜銆?/p>
[linux /home/]tar zxvf cflow-1.1.tar.gz
[linux /home/cflow-1.1/src]$./configure
[linux /home]$make CFLAGS=-pg LDFLAGS=-pg
[linux /home/cflow-1.1/src]$cflow parser.c
[linux /home/cflow-1.1/src]$gprof -b cflow gmon.out | less
鎭枩浣狅紝涓嶅嚭鎰忓浣犱細(xì)鍦ㄥ睆騫曚笂鐪嬪埌gprof鐨勮緭鍑猴紝鍑芥暟娑堣楁椂闂村拰鍑芥暟璋冪敤鍥撅紝涓嬮潰鏄垜浠庢垜鐨勮緭鍑轟腑鎽樻妱鍑烘潵鐨勪竴灝忔銆?/p>
鐪嬪埌榪欓噷浣犱篃鍙兘瑙夊緱涓婇潰鐨勫嚱鏁拌皟鐢ㄥ浘瀹炲湪鏄笉鏂逛究瀵熺湅錛屼篃鐪嬩笉鍑烘潵涓涓▼搴忚皟鐢ㄧ殑鏁翠綋妗嗘灦銆傛病鏈夊叧緋伙紝鎴戝啀浠嬬粛涓涓湁鐢ㄧ殑宸ュ叿緇欎綘錛屼嬌鐢?Graphviz錛孏raphviz or Graph Visualization 鏄敱 AT&T 寮鍙戠殑涓涓紑婧愮殑鍥懼艦鍙鍖栧伐鍏楓傚畠鎻愪緵浜嗗縐嶇敾鍥捐兘鍔涳紝浣嗘槸鎴戜滑閲嶇偣鍏蟲敞鐨勬槸瀹冧嬌鐢?Dot 璇█鐩磋繛鍥劇殑鑳藉姏銆傚湪榪欓噷錛屽皢綆鍗曚粙緇嶅浣曚嬌鐢?Dot 鏉ュ垱寤轟竴涓浘褰紝騫跺睍紺哄浣曞皢鍒嗘瀽鏁版嵁杞崲鎴?Graphviz 鍙互浣跨敤鐨勮鑼? Dot 浣跨敤鐨勫浘褰㈣鑼冦?
涓嬪浘緇欏嚭浜嗕竴涓畝鍗曠殑瀹氬悜鍥撅紙directed graph錛夛紝鍏朵腑鍖呭惈 3 涓妭鐐廣傜涓琛屽0鏄庤繖涓浘涓?G錛屽茍涓斿0鏄庝簡璇ュ浘鐨勭被鍨嬶紙digraph錛夈傛帴涓嬫潵鐨勪笁琛屼唬鐮佺敤浜庡垱寤鴻鍥劇殑鑺傜偣錛岃繖浜涜妭鐐瑰垎鍒悕涓?node1銆乶ode2 鍜?node3銆傝妭鐐規(guī)槸鍦ㄥ畠浠殑鍚嶅瓧鍑虹幇鍦ㄥ浘瑙勮寖涓椂鍒涘緩鐨勩傝竟鏄湪鍦ㄤ袱涓妭鐐逛嬌鐢ㄨ竟鎿嶄綔錛?>錛夎繛鎺ュ湪涓璧鋒椂鍒涘緩鐨勶紝濡傜 6 琛屽埌絎?8 琛屾墍紺恒傛垜榪樺杈逛嬌鐢ㄤ簡涓涓彲閫夌殑灞炴?label錛岀敤瀹冩潵琛ㄧず杈瑰湪鍥句腑鐨勫悕縐般傛渶鍚庯紝鍦ㄧ 9 琛屽畬鎴愬璇ュ浘瑙勮寖鐨勫畾涔夈?br />浣跨敤 Dot 絎﹀彿琛ㄧず鐨勭ず渚嬪浘錛坱est.dot錛?/p>
digraph G {
node1;
node2;
node3;
node1 -> node2 [label="edge_1_2"];
node1 -> node3 [label="edge_1_3"];
node2 -> node3 [label="edge_2_3"];
}
[linux /home]$ dot -Tjpg test.dot -o test.jpg
鍦ㄨ繖孌典唬鐮佷腑錛屾垜鍛婅瘔 Dot 浣跨敤 test.dot 鍥懼艦瑙勮寖錛屽茍鐢熸垚涓涓?JPG 鍥懼儚錛屽皢鍏朵繚瀛樺湪鏂囦歡 test.jpg 涓傛墍鐢熸垚鐨勫浘鍍忓鍥?鎵紺恒傚湪姝ゅ錛屾垜浣跨敤浜?JPG 鏍煎紡錛屼絾鏄?Dot 宸ュ叿涔熷彲浠ユ敮鎸佸叾浠栨牸寮忥紝鍏朵腑鍖呮嫭 GIF銆丳NG 鍜?postscript絳夌瓑銆?
閮ㄥ垎璋冪敤鍥懼涓嬶紝鏈変簡榪欎釜鍥炬槸涓嶆槸瀵圭▼搴忔暣浣撴鏋舵湁浜嗕釜娓呮櫚鍦頒簡瑙o紝濡傛灉浣犲鐢熸垚鐨勮皟鐢ㄥ浘鏁堟灉涓嶆弧鎰忥紝浣犺繕鍙互閫氳繃淇敼mkgraph0鑴氭湰浣夸箣浜х敓鍚堥傜殑dot鏂囦歡鍗沖彲錛?br />
浣跨敤gprof , Graphviz , mkgraph 鐢熸垚鍑芥暟璋冪敤鍥?br />1錛?浣跨敤 -pg 緙栬瘧鍜岄摼鎺ヤ綘鐨勫簲鐢ㄧ▼搴忋?br />2錛?鎵ц浣犵殑搴旂敤紼嬪簭浣夸箣鐢熸垚渚沢prof 鍒嗘瀽鐨勬暟鎹?br />3錛?浣跨敤mkgraph鑴氭湰鐢熸垚鍥懼艦鍖栫殑鍑芥暟璋冪敤鍥俱?/p>
鏂囨。錛氱敤 Graphviz 鍙鍖栧嚱鏁拌皟鐢?br />鏂囨。錛歋peed your code with the GNU profiler
鏂囨。錛歡ropf 甯姪鏂囦歡
Mkgraph 鑴氭湰錛?a >http://www.ioplex.com/~miallen/
Graphviz 宸ュ叿錛?a >http://www.graphviz.org
Cflow 錛?a >http://www.gnu.org/software/cflow/
錛堣矗浠葷紪杈戯細(xì)鍩庡皹 68476636-8003錛?/p>
]]>