2013-08-12 4 views
1

동일한 파일에서 함수를 호출하고 구현하는 간단한 .c 프로그램이 있습니다. 나는 GCC를 사용하여 컴파일 :Callgrind 출력에 함수 호출이 없습니다.

gcc myProgram.c -o myProgram -g 

그런 다음 나는 callgrind.out를 생성하는 callgrind에 Valgrind의 사용 * 파일을..

valgrind --tool=callgrind myProgram 

그럼 내가 전화 grind_annotate

callgrind_annotate callgrind.out.1974 

를 사용하지만 결과는 다음과 파일에있는 함수 호출을 포함 나던 것과 유사한 무언가이다. 다른 C 코드를 시도했지만 비슷한 결과를 얻었습니다. 이유는 무엇입니까?

-------------------------------------------------------------------------------- 
Profile data file 'callgrind.out.1974' (creator: callgrind-3.8.1) 
-------------------------------------------------------------------------------- 
I1 cache: 
D1 cache: 
LL cache: 
Timerange: Basic block 0 - 34772 
Trigger: Program termination 
Profiled target: myProgram (PID 1974, part 1) 
Events recorded: Ir 
Events shown:  Ir 
Event sort order: Ir 
Thresholds:  99 
Include dirs:  
User annotated: 
Auto-annotation: off 

-------------------------------------------------------------------------------- 
    Ir 
-------------------------------------------------------------------------------- 
159,723 PROGRAM TOTALS 

-------------------------------------------------------------------------------- 
    Ir file:function 
-------------------------------------------------------------------------------- 
51,246 ???:_dl_addr [/lib64/libc-2.5.so] 
25,816 ???:do_lookup_x [/lib64/ld-2.5.so] 
21,895 ???:_dl_lookup_symbol_x [/lib64/ld-2.5.so] 
10,955 ???:_dl_relocate_object [/lib64/ld-2.5.so] 
10,487 ???:strcmp'2 [/lib64/ld-2.5.so] 
4,974 ???:check_match.8516 [/lib64/ld-2.5.so] 
3,885 ???:getenv [/lib64/libc-2.5.so] 
1,834 ???:strcmp [/lib64/ld-2.5.so] 
1,663 ???:_dl_map_object_from_fd [/lib64/ld-2.5.so] 
1,638 ???:strlen [/lib64/ld-2.5.so] 
1,382 ???:bsearch [/lib64/libc-2.5.so] 
1,323 ???:_dl_name_match_p [/lib64/ld-2.5.so] 
1,288 ???:strsep [/lib64/ld-2.5.so] 
1,211 ???:_dl_map_object_deps [/lib64/ld-2.5.so] 
1,175 ???:dl_main [/lib64/ld-2.5.so] 
1,038 ???:_dl_check_map_versions [/lib64/ld-2.5.so] 
    796 ???:malloc_consolidate [/lib64/libc-2.5.so] 
    780 ???:strncmp [/lib64/libc-2.5.so] 
    751 ???:_dl_cache_libcmp'2 [/lib64/ld-2.5.so] 
    635 ???:__libc_memalign [/lib64/ld-2.5.so] 
    625 ???:setlocale [/lib64/libc-2.5.so] 
    624 ???:_nl_find_locale [/lib64/libc-2.5.so] 
    586 ???:intel_02_known_compare [/lib64/libc-2.5.so] 
    577 ???:_dl_fixup [/lib64/ld-2.5.so] 
    576 ???:_dl_new_object [/lib64/ld-2.5.so] 
    543 ???:memset [/lib64/ld-2.5.so] 
    528 ???:index [/lib64/ld-2.5.so] 
    489 ???:_dl_fini [/lib64/ld-2.5.so] 
    471 ???:match_symbol [/lib64/ld-2.5.so] 
    469 ???:open_verify [/lib64/ld-2.5.so] 
    450 ???:memcpy [/lib64/ld-2.5.so] 
    427 ???:_dl_map_object [/lib64/ld-2.5.so] 
    415 ???:intel_check_word [/lib64/libc-2.5.so] 
    400 ???:_int_malloc [/lib64/libc-2.5.so] 
    395 ???:mempcpy [/lib64/ld-2.5.so] 
    392 ???:_dl_sysdep_start [/lib64/ld-2.5.so] 
    375 ???:_dl_start [/lib64/ld-2.5.so] 
    370 ???:ptmalloc_init [/lib64/libc-2.5.so] 
    348 ???:new_composite_name [/lib64/libc-2.5.so] 
    340 ???:_dl_load_cache_lookup [/lib64/ld-2.5.so] 
    331 ???:_dl_next_ld_env_entry [/lib64/ld-2.5.so] 
    301 ???:open_path [/lib64/ld-2.5.so] 
    279 ???:process_envvars [/lib64/ld-2.5.so] 
    279 ???:_dl_important_hwcaps [/lib64/ld-2.5.so] 
    278 ???:_dl_init_paths [/lib64/ld-2.5.so] 
    225 ???:_dl_runtime_resolve [/lib64/ld-2.5.so] 
    188 ???:_dl_sort_fini [/lib64/ld-2.5.so] 
    165 ???:_dl_cache_libcmp [/lib64/ld-2.5.so] 
    164 ???:call_init [/lib64/ld-2.5.so] 
    135 ???:fillin_rpath [/lib64/ld-2.5.so] 
    118 ???:handle_intel [/lib64/libc-2.5.so] 
    114 ???:malloc [/lib64/ld-2.5.so] 
    109 ???:init_cacheinfo [/lib64/libc-2.5.so] 
    109 ???:_IO_un_link [/lib64/libc-2.5.so] 
    108 ???:_dl_catch_error [/lib64/ld-2.5.so] 
    96 ???:_dl_setup_hash [/lib64/ld-2.5.so] 
    94 ???:_dl_add_to_namespace_list [/lib64/ld-2.5.so] 
    81 ???:_IO_flush_all_lockp [/lib64/libc-2.5.so] 
    79 ???:_dl_check_all_versions [/lib64/ld-2.5.so] 
    76 ???:set_binding_values [/lib64/libc-2.5.so] 
    75 ???:__new_exitfn [/lib64/libc-2.5.so] 
    73 ???:_dl_allocate_tls_init [/lib64/ld-2.5.so] 
    73 ???:_dl_init [/lib64/ld-2.5.so] 
    72 ???:calloc [/lib64/ld-2.5.so] 
    65 ???:exit [/lib64/libc-2.5.so] 
    65 ???:[email protected]@GLIBC_2.2.5 [/lib64/libc-2.5.so] 
    64 ???:_xstat [/lib64/ld-2.5.so] 
    63 ???:__sigsetjmp [/lib64/ld-2.5.so] 
    63 ???:init_tls [/lib64/ld-2.5.so] 
    59 ???:open [/lib64/ld-2.5.so] 

답변

1

봅니다 callgrind_annotate이 옵션을 추가합니다 :

callgrind_annotate --threshold=100 --tree=both callgrind.out.* 

--tree=both 인쇄, 각각의 기능, 자신의 호출자와 호출 된 기능. 당신이 당신의 기능을 찾기 위해이 명령을 실행할 수 있도록

--threshold=100

이 BTW,이 두 옵션은 매우 중요한 출력을 인쇄 할 수 있습니다 (기본값은 현재 함수를 인쇄 할 수 있도록 99 %입니다) 모든 이벤트를 출력합니다 :

callgrind_annotate --threshold=100 --tree=both callgrind.out.* | grep your_function_name 


편집 이상해 1

. 코드를 게시 할 수 있습니까? 이 내 코드입니다 :

// myProgram.c 
#include <stdio.h> 

void foo(int value); 

int main(void) { 
    foo(10); 
    return 0; 
} 

void foo(int value) { 
    printf("%d\n", value); 
} 

그리고 이것은 내 출력 :

$ gcc myProgram.c -o myProgram -g 
$ valgrind --tool=callgrind ./myProgram 
==5551== Callgrind, a call-graph generating cache profiler 
==5551== Copyright (C) 2002-2012, and GNU GPL'd, by Josef Weidendorfer et al. 
==5551== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info 
==5551== Command: ./myProgram 
==5551== 
==5551== For interactive control, run 'callgrind_control -h'. 
10 
==5551== 
==5551== Events : Ir 
==5551== Collected : 102927 
==5551== 
==5551== I refs:  102,927 
$ callgrind_annotate --threshold=100 --tree=both callgrind.out.5551 | grep "foo" 
    783 < myProgram.c:foo (1x) [/home/junior/test/myProgram] 
1,613 < myProgram.c:foo (1x) [/home/junior/test/myProgram] 
    11 * myProgram.c:foo [/home/junior/test/myProgram] 
2,407 > myProgram.c:foo (1x) [/home/junior/test/myProgram] 
+0

내가 다시 기능을 볼 수 없습니다. 표시된 유일한 기능은 /lib64/ld-2.5.so입니다. – user847988

+0

내 대답을 다시 한번 보았습니다. 편집했습니다. –

관련 문제