Valgrind - это инструмент динамического двоичного анализа (DPA), который использует платформу динамического двоичного инструментария (DPI) для проверки распределения памяти, обнаружения взаимоблокировок и профилирования приложений. Платформа DPI имеет собственный менеджер памяти низкого уровня, планировщик, обработчик потоков и обработчик сигналов. В набор инструментов Valgrind входит инструмент типа
- Memcheck - динамически отслеживает распределение памяти и сообщает об утечках памяти.
- Helgrind - обнаруживает и сообщает о мертвых блокировках, потенциальных скачках данных и отменах блокировок.
- Cachegrind - имитирует взаимодействие приложения с системным кешем и предоставляет информацию об ошибках кеша.
- Nulgrind - простой valgrind, который никогда не анализирует. Используется разработчиками для оценки производительности.
- Massif - инструмент для анализа использования кучи памяти приложением.
Инструмент Valgrind использует механизм дизассемблирования и ресинтеза, где он загружает приложение в процесс, разбирает код приложения, добавляет инструментальный код для анализа, собирает его обратно и выполняет приложение. Он использует Just Intime Compiler (JIT) для встраивания приложения с инструментарием кода.
Valgrind Tool = Valgrind Core + Tool Plugin
Valgrind Core разбирает код приложения и передает фрагмент кода в плагин инструмента для инструментовки. Плагин инструмента добавляет код анализа и собирает его обратно. Таким образом, Valgrind предоставляет гибкость для написания нашего собственного инструмента поверх платформы Valgrind. Valgrind использует теневые регистры и теневую память для инструментирования инструкций чтения / записи, системного вызова чтения / записи, выделения стека и кучи.
Valgrind предоставляет оболочки для системного вызова и регистрирует обратные вызовы до и после каждого системного вызова для отслеживания памяти, доступ к которой осуществляется как часть системного вызова. Таким образом, Valgrind является уровнем абстракции ОС между операционной системой Linux и клиентским приложением.
Диаграмма иллюстрирует 8 фаз Valgrind: