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.