= Профилирование кода :category: Программирование :tags: программирование, отладка, производительность, профилирование, gprof, == Общее описание Чтобы профилировать приложения, компилируемые http://gcc.gnu.org[GCC], необходимо добавлять флаг `-fno-omit-frame-pointer` и, желательно, `-g`. == quickstack Утилита для отслеживания стеков вызовов функций https://github.com/yoshinorim/quickstack[quicktrack]. Пример использования: [source,sh] ---- quickstack -f -p $(pidof application) ---- == perf Утилита профилирования для ядра Linux (находится в дереве его исходных текстов в каталоге `tools/perf`). [source,sh] ---- perf record --call-graph dwarf -- ./application perf report -g graph --no-children ---- Полезные ссылки: * https://perf.wiki.kernel.org/index.php/Main_Page[Официальная страница] * https://stackoverflow.com/questions/1777556/alternatives-to-gprof/10958510#10958510[Примеры] * http://www.brendangregg.com/perf.html[Примеры] == oprofile [source,sh] ---- opcontrol --setup --vmlinux=/boot/vmlinux-`uname -r` ---- == Systemtap https://eax.me/systemtap/[Установка и простые примеры использования SystemTap] == Valgrind https://eax.me/valgrind/[Хорошая статья] об использовании Valgrind для поиска утечек, а также о взаимодействии с GDB. В версии 3.15 добавление инструмент профилирования кучи DHAT (Dynamic Heap Analysis Tool), позволяющий отследить все запросы на распределения памяти в куче и выявить утечки ресурсов, места излишне большой активности при работе с кучей, неиспользованные выделения памяти, краткосрочные выделения и неэффективное размещение данных в куче. [source,sh] ---- valgrind --tool=dhat ./application ---- == gperftools == Разное * https://eax.me/c-cpp-profiling/[Профилирование кода на C/C++ в Linux и FreeBSD] * http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/[Примеры] == Графическое отображение * http://www.brendangregg.com/flamegraphs.html[Flame Graphs] * https://github.com/jrfonseca/gprof2dot[gprof2dot]