Есть ли какой-либо профилировщик, который работает с -fomit-frame-pointer на x86_64? - PullRequest
1 голос
/ 01 марта 2012

SysProf неправильно генерирует стек вызовов без него, GProf не совсем точен. А также, являются ли профилировщики, которые работают без -fno-omit-frame-pointer, такими же точными, как и те, которые полагаются на него?

Ответы [ 3 ]

2 голосов
/ 24 августа 2012

Нет никого, о ком бы я знал.С помощью указателей фрейма обход стека - довольно простое упражнение.Вы просто разыменовываете указатель кадра, чтобы найти старый указатель кадра, указатель стека и указатель инструкции, и повторяете, пока не закончите.Без указателей фреймов вы не можете надежно обходить стек без дополнительной информации, что на платформах ELF обычно означает DWARF CFI.DWARF довольно сложен для анализа и требует, чтобы вы прочитали изрядное количество дополнительной информации, что непросто сделать в тех временных рамках, с которыми должны работать профилировщики.

Один из возможных способов реализации этого состоит в том, чтобыпросто сохраняйте стековую память для каждого семпла, а затем переводите ее в автономный режим, используя CFI для правильной размотки.В зависимости от глубины стека это может потребовать довольно много места для хранения, а копирование может быть непозволительным.Я никогда не слышал о профилировщике, использующем эту технику, но Джулиан Сьюард выразил это как потенциальную стратегию реализации для встроенного в Firefox профилировщика.

2 голосов
/ 28 января 2015

Можно использовать последние версии linux perf--call-graph dwarf):

perf record -F99 --call-graph dwarf myapp

Для размотки стека используется .eh_frames (или .debug_frames) с libunwind.

По моему опыту, иногда это теряется.

С последней версией perf + kernel на Haswell вы можете использовать Последнюю запись ветвления с --call-graph lbr.

1 голос
/ 01 марта 2012

Большинству профилировщиков будет трудно работать, когда утверждается -fomit-frame-pointer.Вы, вероятно, не должны использовать это и ссылаться на отладочные версии библиотек (которые почти наверняка скомпилированы без -fomit-frame-pointer), если вы хотите выполнить разумное профилирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...