Як змусити linux "Perf Record" працювати для символів libc та libstdc ++?


12

Я використовую perf record -gна x86-64 Linux для профілю програми. Кілька символів у libc або libstdc ++ є 0як батьківські: __GI___strcmp_ssse3(libc) та strcmp@plt(libstdc ++), наприклад. (Я насправді можу зламати ці символи на відладчику і отримати зворотній слід.)

Мені б хотілося знати, що є основними абонентами цих функцій, і чому вони не записуються. Це тому, що libc та libstdc ++ не мають покажчиків кадру на x86_64? І, практичніше, чи існує якийсь шлях до цього?

Відповіді:


5

Це давнє питання, але це зараз можливо з --call-graph dwarf. На чоловіковій сторінці:

 -g
       Enables call-graph (stack chain/backtrace) recording.

   --call-graph
       Setup and enable call-graph (stack chain/backtrace) recording, implies -g.

           Allows specifying "fp" (frame pointer) or "dwarf"
           (DWARF's CFI - Call Frame Information) as the method to collect
           the information used to show the call graphs.

           In some systems, where binaries are build with gcc
           --fomit-frame-pointer, using the "fp" method will produce bogus
           call graphs, using "dwarf", if available (perf tools linked to
           the libunwind library) should be used instead.

Я вважаю, що для цього потрібно дещо недавнє ядро ​​Linux (> = 3,9? Я не зовсім впевнений). Ви можете перевірити, чи пов'язаний пакет ваших програм distro з libdw або libunwind readelf -d $(which perf) | grep -e libdw -e libunwind. У Fedora 20 perf пов’язано з libdw.


perf record --call-graph dwarfвирішує цю проблему для мене. на жаль, схоже, що у perf виникають проблеми із відображенням графіків викликів на основі виклику (тобто "перевернутого") при використанні карликової інформації. Тому я почав використовувати FlameGraph для візуалізації.
синій

зауважте, що використання карликових розмотувань спричиняє дуже значні накладні витрати під час профілювання
Azsgy

-2

perfце інструмент ядра, який показує минулий час для системних викликів. Ви шукаєте GNU gprof. "gprof - відображення даних профілю графіка виклику". Щоб використовувати gprof, вам потрібно зібрати свої джерела за допомогою -pgперемикача.

Поруч із цим існує безліч складних інструментів профілювання eclipse-cdt-profiling-framework.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.