Я использую perf record -g
на x86-64 Linux для профилирования программы. Некоторые символы в libc или libstdc ++ имеют 0
в качестве родителя: __GI___strcmp_ssse3
(libc) и strcmp@plt
(libstdc ++), например. (Я действительно могу разбить эти символы в отладчике и получить обратную трассировку.)
Я хотел бы знать, каковы основные вызывающие стороны этих функций и почему они не записываются. Это потому, что libc и libstdc ++ не имеют указателей фреймов на x86_64? И, более практично, есть ли способ обойти это?
perf record --call-graph dwarf
решает эту проблему для меня. к сожалению, кажется, что у perf возникают проблемы с отображением графов вызовов (то есть "инвертированных") при использовании информации дварфов. Вот почему я начал использовать FlameGraph для визуализации.perf
это инструмент ядра, который показывает время, затраченное на системные вызовы Вы ищете GNU gprof. msgstr "gprof - отобразить данные профиля графа вызовов". Чтобы использовать gprof, вам нужно скомпилировать ваши исходники с помощью-pg
ключа.Помимо этого есть много сложных инструментов профилирования, как
eclipse-cdt-profiling-framework
.источник