2016-10-29 1 views
1

나는 우분투 16.04 사용자입니다. c++ 프로그램의 프로파일 링을 위해 perf 도구를 사용합니다. 그래서 실행 프로필에서 C++ 프로그램을

perf record ./myprogram myprogram_args 
perf report 

지금 출력으로 내가 가진 :

14,52% CSim2Sim libsimgrid.so.3.13.90 [.] lmm_solve 
    4,40% CSim2Sim libsimgrid.so.3.13.90 [.] lmm_update_modified_set_rec 
    4,05% CSim2Sim libc-2.23.so   [.] _int_malloc 
    3,30% CSim2Sim libsimgrid.so.3.13.90 [.] simgrid::surf::Model::next_occuring_event_lazy 
    2,19% CSim2Sim libc-2.23.so   [.] _int_free 
........................................................................ 

내가 내 프로그램 만 "깊이"와 라이브러리 호출을 참조하십시오. 이 템플릿과 유사한 perf에서 보고서를 얻으려면 어떻게합니까? (이 같은) :

4,52% CSim2Sim my_function1(int argc, char* argv[]) 
    3,52% CSim2Sim my_function2(int argc, char* argv[]) 
    3,52% CSim2Sim my_function3(int argc, char* argv[]) 
    1,52% CSim2Sim my_function4(int argc, char* argv[]) 
+0

아마도'-g' 옵션을 사용하여 컴파일하고 링크해야합니다. –

+0

@OlafDietsche 시도해 보았지만 모두 동일합니다 = ( –

+2

[* this *] (http://stackoverflow.com/a/378024/23771) 시도해 보셨습니까? –

답변

4

Perf Wikiinfo:perf 이상 에서가는, 마지막으로 반환 한과 Tutorial - Perf Wiki

소스 수준의 분석에 주석을
...
반환 한의 주석을 생성 할 수 응용 프로그램이 -ggdb으로 컴파일 된 경우 소스 코드 수준 정보. 다음 스 니펫은이 디버깅 정보로 컴파일 될 때 noploop의 동일한 실행에 대한 훨씬 더 유익한 출력을 보여줍니다.

따라서 -ggdb 옵션을 사용하여 컴파일하고 (링크 할 수 있습니까?) 트릭을 수행해야합니다.

그런 다음 perf record을 사용하여 런타임 정보를 수집 한 다음 나중에 perf annotate을 사용하여이를 분석 할 수 있습니다.


방금 ​​Alternatives to gprof [closed]에 대한 답변을 찾았습니다. 호출 그래프 정보를 얻으려면 gcc의 옵션 -fno-omit-frame-pointer을 사용할 것을 권장합니다. 따라서 달성하려는 목표와 최적화 수준에 따라이 옵션을 추가해야 할 수도 있습니다.

2

gprof(1)을 사용하는 것이 좋습니다. -pg (아마도 -O .... 등)을 gcc 및/또는 g++ (아마도 Makefile의 일부 CFLAGS 또는 CXXFLAGS)으로 변경하여 C (또는 C++) 프로그램을 컴파일합니다. GCC의 instrumentation options에 대해 읽어보십시오.

관련 문제