Я пользователь 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[])
Исходя из перфорация над Информация: перфорация в Perf Wiki, и, наконец, Учебник — Perf Wiki
Анализ исходного уровня с помощью perf annotate
…
perf annotate может генерировать информацию об уровне исходного кода, если приложение скомпилировано с -ggdb. Следующий фрагмент демонстрирует гораздо более информативный вывод для того же выполнения noploop при компиляции с этой информацией отладки.
Таким образом, компиляция (и, возможно, связывание?) С опцией -ggdb
должен сделать свое дело.
Тогда вы можете использовать perf record
собирать информацию во время выполнения, а затем анализировать ее с perf annotate
,
Я только что нашел этот ответ Альтернативы gprof [закрыто]. Рекомендуется использовать опцию gcc -fno-omit-frame-pointer
, если вы хотите получить информацию о графе вызовов. Таким образом, в зависимости от того, чего вы хотите достичь, и вашего уровня оптимизации, вам может понадобиться добавить и эту опцию.
Я также рекомендовал бы использовать дргоЕ (1). Вы скомпилируете свою C (или C ++) программу, передав -pg
(вероятно, также с -O
….) чтобы gcc
и / или g++
(возможно, изменить некоторые CFLAGS
или же CXXFLAGS
в вашем Makefile
). Прочитать о варианты инструментовки GCC.