Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
5.3. Профилирование памяти при помощи Valgrind
Valgrind предоставляет инструменты для профилирования и анализа производительности программ. В этой главе будут рассмотрены инструменты, которые помогут обнаружить попытки использования неинициализированной памяти и неверного выделения памяти. Для запуска отдельной утилиты выполните:
valgrind --tool=утилита программа
В этой команде утилита — название утилиты. Так, для профилирования памяти можно указать
memcheck
, massif
, cachegrind
. Следом за утилитой введите имя анализируемой программы. В режиме диагностики программа выполняется намного медленнее.
Раздел 3.5.3, «Valgrind» содержит описание основных функций. Более подробную информацию, включая описание дополнительных модулей Eclipse, можно найти в руководстве по развертыванию по адресу http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/, на справочной странице
man valgrind
, а также в файлах:
/usr/share/doc/valgrind-версия/valgrind_manual.pdf
/usr/share/doc/valgrind-версия/html/index.html
.
5.3.1. Memcheck
Если команда
valgrind
не содержит параметр --tool
, по умолчанию будет выбрана утилита memcheck
. Memcheck поможет обнаружить те ошибки, которые другие инструменты не могут диагностировать, включая использование неопределенных и неинициализированных значений, некорректное освобождение памяти кучи, пересечение указателей и утечки памяти. Во время диагностики программы будут работать в 10-30 раз медленнее.
Memcheck возвращает коды обнаруженных ошибок. Их описание можно найти в
/usr/share/doc/valgrind-version/valgrind_manual.pdf
.
Memcheck только сообщает об ошибках, но не препятствует их появлению. Так, если обращение программы к памяти приводит к сегментации, Memcheck сообщит об ошибке, но не остановит сегментацию.
Параметры Memcheck включают:
--leak-check
- Поиск утечек памяти после завершения программы клиента. По умолчанию имеет значение
summary
и возвращает число обнаруженных утечек. Другие значения включаютyes
иfull
, и возвращают информацию об индивидуальных утечках, аno
отключает проверку. --undef-value-errors
yes
включает сообщения об ошибках для неинициализированных значений, аno
их отключает.--ignore-ranges
- Игнорируемые диапазоны. Пример:
--ignore-ranges=0xPP-0xQQ,0xRR-0xSS
.
Полный список параметров можно найти в
/usr/share/doc/valgrind-версия/valgrind_manual.pdf
.