2010-05-08 21 views
9

Mam biegać callgrind z mojej aplikacji tak:Potrzebujesz pomocy w wyjściu callgrind czytania

valgrind --tool=callgrind MyApplication 

a następnie zadzwonić:

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

widzę wyjście jak:

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] 

I zadaje kilka pytań:

  1. Co oznacza liczba po prawej? Czy to oznacza, że ​​wydaje on tyle czasu na akumulację tak długo, nazywając funkcję po prawej? Jak mogę sprawdzić, ile razy funkcja ta została wywołana i czy obejmuje ona czas spędzony na wywoływanie funkcji wywoływanych przez tę funkcję?

  2. Co oznacza linia z ???? na przykład ???:0x0000000000009190 [/usr/lib/libpangocairo-1.0.so.0.2800.0]

Odpowiedz

4

Użyj KCachegrind. Rozszyfrowanie tekstu jest po prostu bez znaczenia.

+0

Jeśli używasz mac: http://stackoverflow.com/questions/4473185/do-you-have-kcachegrind-like-profiling-tools-for-mac – brokenfoot

6

Jako, że już Let_Me_Be odpowiedział, preferowanym sposobem jest KCachegrind. Upewnij się także, czy w systemie jest dostępne polecenie dot, aby wygenerować za jego pomocą wykresy. Istnieje również narzędzie callgrind_annotate, które może wykonać podstawowe przetwarzanie na poziomie wiersza polecenia.

Odnośnie drugiego pytania, są to wywołania wewnątrz bibliotek bez informacji o debugowaniu. Zwykle nie jest to takie interesujące, ale jeśli naprawdę potrzebujesz tych informacji, powinieneś sam skompilować bibliotekę z symbolami debugowania ( i flag optymalizacyjnych, ponieważ profilujesz).

+0

Ale program, który chcę profilować to gtk aplikacji, ale KCachegrind to aplikacja KDE. Co mogę zrobić ? – n179911

+0

Nie potrzebujesz KDE, aby uruchomić KCachegrind. Posiadanie kdelibs powinno wystarczyć i może być już zainstalowane w Twoim systemie. Poza tym KCachegrind nie służy do profilowania aplikacji KDE, może odczytać dane wyjściowe wywoływane przez callgrind. –

Powiązane problemy