2016-10-29 3 views
1

Я пользователь Ubuntu 16.04. Для профилирования c++ программа Я использую инструмент perf. Так я бегу:Профиль C++ program in perf

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 
........................................................................ 

Я вижу только «глубина» и библиотечные вызовы из моей программы. Как я могу получить отчет от перфоратора, подобный этому шаблону? (Что-то вроде этого):

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

Перехода от над info:perf к Perf Wiki, и, наконец, Tutorial - Perf Wiki

анализа уровня Источника с перфорацией аннотирование
...
перфорации аннотировать может генерировать информация уровня исходного кода, если приложение скомпилировано с -ggdb. Следующий фрагмент показывает гораздо более информативный вывод для того же самого выполнения noploop при компиляции с этой отладочной информацией.

Так что компиляция (и, возможно, соединение?) С опцией -ggdb должна сделать трюк.

Затем вы можете использовать perf record для сбора информации о времени выполнения, а затем проанализировать это с помощью perf annotate.


Я только что нашел этот ответ Alternatives to gprof [closed]. Он рекомендует использовать опцию gcc -fno-omit-frame-pointer, если вы хотите получить информацию о графике вызовов. Таким образом, в зависимости от того, чего вы хотите достичь и уровня оптимизации, вам может потребоваться добавить эту опцию.

2

Я бы также рекомендовал использовать gprof(1). Вы скомпилируете свою программу C (или C++), пройдя -pg (возможно, также с -O ....) до gcc и/или g++ (возможно, измените некоторые CFLAGS или CXXFLAGS в вашем Makefile). Читайте о instrumentation options GCC.