Какие бесплатные (статистические) профилировщики с низкими издержками можно использовать в Linux?
-
21-08-2019 - |
Вопрос
Предпочтительно из репозиториев Ubuntu.
Решение
Другие упомянули OПрофиль;для полносистемного статистического профилирования в современных установках Linux это действительно здорово.
Более почтенный инструмент (который не требует поддержки ядра и, следовательно, будет работать в старых версиях Linux или даже в операционных системах, отличных от Linux) — GNU гпроф, включен в бинутилс (и, следовательно, несомненно, уже установлен в вашей среде разработки).
Использовать gprof
, просто скомпилируйте свое приложение с помощью -pg
аргумент для gcc
;файл под названием gmon.out
будет создан после выхода из вашей программы, и gprof
затем можно использовать для анализа этого файла.
Другие советы
Простой, но эффективный метод — запустить программу под GDB и обработать сигнал SIGINT.Пока программа работает, сгенерируйте SIGINT вручную, набрав control-c или что-то еще, и пока она остановлена, запишите стек вызовов.Сделайте это несколько раз, например 10 или 20, пока программа субъективно работает медленно.Это даст вам очень хорошее представление о том, куда уходит время.
Этот метод не дает точного времени, но позволяет точно определить инструкции, включая инструкции по вызову, которые требуют больше всего времени.
Сиспроф — хороший профилировщик, похожий на OProfile (также имеет графический интерфейс GTK).который доступен в репозитории Ubuntu.Это профилировщик уровня ядра, для которого требуется модуль ядра, в отличие от gprof, однако, в отличие от gprof, он может профилировать многопоточные приложения.
Есть OПрофиль.Он не так уж и сложен в использовании, но несколько глючен.
У меня был хороший успех с oprofile (http://oprofile.sourceforge.net/news/), который также доступен в репозиториях Ubuntu.Он не требует перекомпиляции и не имеет каких-либо ограничений в отношении общих объектов и т.п.