Набор инструментов для выявления проблем при работе с памятью.

valgrind 002

Valgrind — набор инструментов для выявления проблем при работе с памятью, обнаружения утечек памяти и профилирования.

valgrind 003

Создавался Valgrind как инструмент для отладки использования памяти в GNU / Linux системах архитектуры x86, но позднее проект развился в обобщённый фреймворк для создания инструментов динамического анализа использования памяти, профилирования (сбора характеристик работы приложений) и поиска ошибок связанных с синхронизацией в многопоточных приложениях.

valgrind 004

Valgrind имеет модульную архитектуру, выполняющего эмуляцию процессора ядра и модулей-анализаторов, выполняющих сбор и анализ информации полученной во время выполнения кода на эмуляторе.

valgrind 005

Основным модулем Valgrind является memcheck, он обеспечивает обнаружение утечек памяти и прочих ошибок связанных с неправильной работой с областями памяти. Модуль cachegring анализирует выполнение кода, собирая данные (статистику) по всему приложению, отдельных функций и строк кода.

valgrind 006

Модулем callgring анализируются вызовы функций, что позволяет построить древо вызова функций и соответственно проанализировать узкие места в работе приложения.

valgrind 007

valgrind 008

Модуль massif анализирует выделение памяти различными частям приложения, модуль helgrig анализирует выполняемый код на наличие различных ошибок синхронизации, при использовании многопоточного кода.

valgrind 009

Valgrind достаточно проста в использовании, необходимые функции задаются опциями из командной строки, для исследуемого приложения никакой специальной подготовки не требуется. Анализируемое приложение запускается, с заданными аргументами (если требуется) и для него будет проведён поиск утечек памяти.

valgrind 010

По умолчанию Valgrind запускает модуль memcheck, но пользователь может самостоятельно указать выполняемый модуль. Для облегчения использования можно часто используемые опции задать в конфигурационном файле (~/valgrindrc) и их не придётся вводить при каждом запуске (некоторое количество опций одинаковы для всех модулей).

valgrind 011

valgrind 012

Ошибки чтения и записи за пределами выделенной памяти, плюс ещё несколько видов ошибок выдаются сразу, в процессе работы приложения. Ошибки ведущие к утечкам памяти выводятся после завершения работы анализируемого приложения, в виде сводной таблицы описывающей количество найденных ошибок, а также выделение памяти.

valgrind 016

Подробные данные записываются в файл (massif.out.), для их анализа может использоваться встроенная консольная утилита ms_print, выдающая данные в виде ASCII-графиков (или сторонние приложения, например Massif Visualizer).

valgrind 013

Valgrind входит в состав практически всех GNU / Linux систем и хорошо документирована, имеется некоторое количество модулей считающихся экспериментальными (не очень стабильными), также пользователь может самостоятельно создавать модули анализирующие выполняемый код.

valgrind 014

Лицензия: GNU General Public License version 2.0 (GPLv2)

valgrind 015

Домашняя страница