Valgrind: Инструмент для отладки памяти и профилирования программного обеспечения
Valgrind
Valgrind: мощный инструмент для отладки памяти, поиска утечек и профилирования программ. Бесплатный фреймворк для динамического анализа кода на Linux и x86.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Программный инструмент для профилирования, отладки памяти и обнаружения утечек памяти.
Programming tool for profiling, memory debugging and memory leak detection
software
Valgrind (/v//æ//l//ɡ//r//ɪ//n//d/) – это программный инструмент для отладки памяти, обнаружения утечек памяти и профилирования. Valgrind изначально был разработан как свободно распространяемый инструмент отладки памяти для Linux на x86, но впоследствии превратился в универсальную платформу для создания инструментов динамического анализа, таких как проверки и профилировщики.
Valgrind ('/v//æ//l//ɡ//r//ɪ//n//d/) is a programming tool for memory debugging, memory leak detection, and profiling. Valgrind was originally designed to be a freely licensed memory debugging tool for Linux on x86, but has since evolved to become a generic framework for creating dynamic analysis tools such as checkers and profilers.
Обзор
Valgrind по сути является виртуальной машиной, использующей методы компиляции на лету, включая динамическую рекомпиляцию. Ни одна часть исходной программы не выполняется напрямую на хост-процессоре. Вместо этого Valgrind сначала преобразует программу во временную, упрощенную форму, называемую промежуточным представлением (IR), которое представляет собой процессорно-независимую статическую форму с единичным присваиванием. После преобразования инструмент (см. ниже) может свободно выполнять любые преобразования над IR, прежде чем Valgrind переведет IR обратно в машинный код и позволит хост-процессору его выполнить. Valgrind перекомпилирует двоичный код для выполнения на хост- и целевых (или эмулированных) процессорах с одинаковой архитектурой. Он также включает в себя GDB-сервер, позволяющий отлаживать целевую программу во время ее работы в Valgrind, с использованием "команд монитора", которые позволяют запрашивать у инструмента Valgrind различную информацию. Значительная производительность теряется в результате этих преобразований (и, как правило, из-за кода, вставляемого инструментом); обычно код, выполняемый с Valgrind и инструментом "none" (который не вносит изменений в IR), работает со скоростью от 20% до 25% от скорости обычной программы.
Valgrind is in essence a virtual machine using just in time compilation techniques, including dynamic recompilation. Nothing from the original program ever gets run directly on the host processor. Instead, Valgrind first translates the program into a temporary, simpler form called intermediate representation (IR), which is a processor neutral, static single assignment form based form. After the conversion, a tool (see below) is free to do whatever transformations it would like on the IR, before Valgrind translates the IR back into machine code and lets the host processor run it. Valgrind recompiles binary code to run on host and target (or simulated) CPUs of the same architecture. It also includes a GDB stub to allow debugging of the target program as it runs in Valgrind, with "monitor commands" that allow querying the Valgrind tool for various information. A considerable amount of performance is lost in these transformations (and usually, the code the tool inserts); usually, code run with Valgrind and the "none" tool (which does nothing to the IR) runs at 20% to 25% of the speed of the normal program.
Поддерживаемые платформы
Начиная с версии 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.
As of version 3.4.0, Valgrind supports Linux on x86, x86 64 and PowerPC. Support for Linux on ARMv7 (used for example in certain smartphones) was added in version 3.6.0. Support for Solaris was added in version 3.11.0. Support for FreeBSD x86 and amd64 was added in version 3.18.0. Support for FreeBSD aarch64 will be in version 3.23.0. There are unofficial ports to other Unix like platforms (like OpenBSD, and NetBSD). From version 3.7.0 the ARM/Android platform support was added. During development (before release) the project was named Heimdall; however, the name would have conflicted with a security package. The original author of Valgrind is Julian Seward, who in 2006 won a Google O'Reilly Open Source Award for his work on Valgrind. Several others have also made significant contributions, including Nicholas Nethercote, Bart Van Assche, Florian Krohm, Tom Hughes, Philippe Waroquiers, Mark Wielaard, Paul Floyd, Petar Jovanovic, Carl Love, Cerion Armour Brown and Ivo Raisr. It is used by a number of Linux based projects.