Профилирование — Профиль C ++ программы на перф

Я пользователь Ubuntu 16.04.
Для профилирования c++ Я использую программу 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
........................................................................

Я вижу только «глубину» и библиотечные вызовы из моей программы. Как я могу получить отчет от 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[])

1

Решение

Исходя из над Информация: перфорация в Perf Wiki, и, наконец, Учебник — Perf Wiki

Анализ исходного уровня с помощью perf annotate

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

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

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


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

4

Другие решения

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

2

По вопросам рекламы [email protected]