LINUX.ORG.RU

Как работают профайлеры для компилируемых языков?

 , ,


0

2

Интересует сабж для C/C++. Возьмите любой, скажем, платный. Лицензии 50-100к евриков в год в легкую. Я вот не могу понять, там какие-то супер алгоритмы? Или где?

Как вообще профилировать С/C++ код (я хочу понять, как это внутри устроено, допустим, я хочу свой профайлер написать, с графиками и отчетами)?

Два крайних случая - статистические и точные; первые прерывают исполнение программы с определенной частотой и смотрят, где находилось исполнение; вторые ставят точки прерывания или служебные вызовы в определенных точках программы (обычно точки входа в функции. В реальности может использоваться комбинация подходов.

Еще можно пускать программу в эмуляторе ЦП (valgrind и К).

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)

Я вот не могу понять, там какие-то супер алгоритмы? Или где?

В основном берут бабки за гуйню.

mashina ★★★★★ ()

Смысл, да, такой: таймер (man setitimer) посылает программе сигнал через определенное время. Ты ловишь сигнал и анализируешь rip регистр (где программа сейчас) и стек (rsp, rbp). Смотришь, каким функциям это соответствует (анализируя бинарник и /proc/<pid>/map и строишь отчет.

Как точное количество вызовов функции посчитать и что делать, если было скомпилировано с -fomit-frame-pointer я не знаю. Хотя можно по всякому поизвращаться, но мне и не надо особо

stopitplease ()

valgrind - открываешь исходники и смотришь как оно устроено

iddqd ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.