Введение

Программный инструмент для профилирования, отладки памяти и обнаружения утечек памяти.

Valgrind (/v//æ//l//ɡ//r//ɪ//n//d/) – это программный инструмент для отладки памяти, обнаружения утечек памяти и профилирования. Valgrind изначально был разработан как свободно распространяемый инструмент отладки памяти для Linux на x86, но впоследствии превратился в универсальную платформу для создания инструментов динамического анализа, таких как проверки и профилировщики.

Обзор

Valgrind по сути является виртуальной машиной, использующей методы компиляции на лету, включая динамическую рекомпиляцию. Ни одна часть исходной программы не выполняется напрямую на хост-процессоре. Вместо этого Valgrind сначала преобразует программу во временную, упрощенную форму, называемую промежуточным представлением (IR), которое представляет собой процессорно-независимую статическую форму с единичным присваиванием. После преобразования инструмент (см. ниже) может свободно выполнять любые преобразования над IR, прежде чем Valgrind переведет IR обратно в машинный код и позволит хост-процессору его выполнить. Valgrind перекомпилирует двоичный код для выполнения на хост- и целевых (или эмулированных) процессорах с одинаковой архитектурой. Он также включает в себя GDB-сервер, позволяющий отлаживать целевую программу во время ее работы в Valgrind, с использованием "команд монитора", которые позволяют запрашивать у инструмента Valgrind различную информацию. Значительная производительность теряется в результате этих преобразований (и, как правило, из-за кода, вставляемого инструментом); обычно код, выполняемый с Valgrind и инструментом "none" (который не вносит изменений в IR), работает со скоростью от 20% до 25% от скорости обычной программы.

Поддерживаемые платформы

Начиная с версии 3.4.0, Valgrind поддерживает Linux на x86, x86 64 и PowerPC. Поддержка Linux на ARMv7 (используется, например, в некоторых смартфонах) была добавлена в версии 3.6.0. Поддержка Solaris была добавлена в версии 3.11.0. Поддержка FreeBSD x86 и amd64 была добавлена в версии 3.18.0. Поддержка FreeBSD aarch64 будет доступна в версии 3.23.0. Существуют неофициальные порты на другие Unix-подобные платформы, такие как OpenBSD и NetBSD. Начиная с версии 3.7.0, добавлена поддержка платформы ARM/Android. Во время разработки (до выпуска) проект назывался Heimdall, однако это имя могло конфликтовать с пакетом безопасности. Оригинальным автором Valgrind является Джулиан Сьюард, который в 2006 году получил премию Google O'Reilly Open Source Award за свою работу над Valgrind. Значительный вклад также внесли Николас Нетеркотт, Барт Ван Асше, Флориан Кром, Том Хьюз, Филипп Варокьерс, Марк Вилард, Пол Флойд, Петар Йованович, Карл Лав, Серион Армор Браун и Иво Райзер. Он используется во многих проектах, основанных на Linux.