2010-05-08 182 views
9

我有這樣我的應用程序運行callgrind:需要幫助的閱讀callgrind輸出

valgrind --tool=callgrind MyApplication 

,然後調用:

callgrind_annotate --auto=yes ./callgrind.out.2489 

我看到輸出如下:

768,097,560 PROGRAM TOTALS 

-------------------------------------------------------------------------------- 
     Ir file:function 
-------------------------------------------------------------------------------- 
18,624,794 /build/buildd/eglibc-2.11.1/elf/dl-lookup.c:do_lookup_x 
[/lib/ld-2.11.1.so] 
18,149,492 /src/js/src/jsgc.cpp:JS_CallTracer'2 
[/src/firefox-debug-objdir/js/src/libmozjs.so] 
16,328,897 /src/layout/style/nsCSSDataBlock.cpp:nsCSSExpandedDataBlock::DoAssertInitialState() 
[/src/firefox-debug-objdir/toolkit/library/libxul.so] 
13,376,634 /build/buildd/eglibc-2.11.1/nptl/pthread_getspecific.c:pthread_getspecific 
[/lib/libpthread-2.11.1.so] 
13,005,623 /build/buildd/eglibc-2.11.1/malloc/malloc.c:_int_malloc 
[/lib/libc-2.11.1.so] 
10,404,453 ???:0x0000000000009190 [/usr/lib/libpangocairo-1.0.so.0.2800.0] 
10,358,646 /src/xpcom/io/nsFastLoadFile.cpp:NS_AccumulateFastLoadChecksum(unsigned 
int*, unsigned char const*, unsigned int, int) 
[/src/firefox-debug-objdir/toolkit/library/libxul.so] 
8,543,634 /src/js/src/jsscan.cpp:js_GetToken 
[/src/firefox-debug-objdir/js/src/libmozjs.so] 
7,451,273 /src/xpcom/typelib/xpt/src/xpt_arena.c:XPT_ArenaMalloc 
[/src/firefox-debug-objdir/toolkit/library/libxul.so] 
7,335,131 ???:g_type_check_instance_is_a [/usr/lib/libgobject-2.0.so.0.2400.0] 

我有幾個問題:

  1. 右邊的數字是什麼意思?這是否意味着它花費累積很長時間才能調用右邊的函數?我怎樣才能知道該函數被調用了多少次?它是否包含調用該函數調用函數的時間?

  2. ???是什麼意思?例如???:0x0000000000009190 [/usr/lib/libpangocairo-1.0.so.0.2800.0]

回答

4

使用KCachegrind。解密文本輸出只是沒有意義。

+0

如果您使用的是Mac: http://stackoverflow.com/questions/4473185/do-you-have-kcachegrind-like-profiling-tools-for-mac – brokenfoot 2016-05-19 20:36:58

6

由於Let_Me_Be已經被回答,所以KCachegrind是首選的方法。還要確保您的系統上有dot命令可用於生成圖形。還有callgrind_annotate工具,它可以在命令行級別執行一些基本處理。

關於你的第二個問題,這些是庫中調用沒有調試信息。通常情況並不是那麼有趣,但如果您真的需要這些信息,則應該使用調試符號(優化標誌,因爲您正在分析)自己編譯庫。

+0

但我要分析的程序是一個GTK應用程序,但KCachegrind是一個KDE應用程序。我能做什麼 ? – n179911 2010-05-08 15:41:10

+0

爲了運行KCachegrind,您不需要KDE。有kdelibs應該足夠了,它可能已經安裝在您的系統上。 此外,KCachegrind不用於分析KDE應用程序,它可以讀取任何callgrind輸出。 – 2010-05-08 15:44:53