Valgrind является гибким инструментом для отладки и профилирования исполняемых файлов Linux-x86. Инструмент состоит из ядра, которое программно обеспечивает искусственный процессор x86, и ряда «оболочек», каждая из которых является отладочным или профилирующим инструментом. Архитектура модульная, так что можно легко создавать новые «оболочки», не нарушая существующую структуру.
Наиболее полезной «оболочкой» является memcheck
.
«Оболочка» memcheck
обнаруживает в ваших программах проблемы с управлением памятью. Проверяются все чтения и записи памяти, а вызовы malloc/new/free/delete
перехватываются. В результате memcheck
может обнаружить следующие проблемы
• Использование неинициализированной памяти.
• Чтение/запись в память после ее освобождения.
• Чтение/запись за границей выделенного malloc
блока.
• Чтение/запись в ненадлежащие области стека.
• Утечки памяти, когда указатели на выделенные malloc
теряются навсегда.
• Несоответствующее использование malloc/new/new[]
против free/delete/delete[]
.
• Некоторые неправильные употребления pthreads
API POSIX.
Проблемы, подобные этим, могут быть трудно обнаруживаемыми другими средствами, часто остающимися необнаруженными в течение длительного времени и вызывающими редкие, трудные для обнаружения отказы.
Другие «оболочки» более специализированы:
• cachegrind
осуществляет обстоятельную имитацию кэшей I1, D1 и L2 процессора, поэтому может точно указать источники осечек кэшей в вашем коде.
• addrcheck
идентична memcheck
за исключением одной детали — она не проверяет неинициализированные данные. Все остальные проверки — главным образом, точная проверка адресов — по-прежнему проводится. Обратной стороной этого является то, что вы не перехватываете ошибки неинициализированных данных, которые может найти memcheck
.
Но положительная сторона значительна: программы работают почти в два раза быстрее, чем с memcheck
, используя значительно меньше памяти. Утилита по-прежнему находит чтения/записи освобожденной памяти, памяти за пределами выделенных блоков и в других недействительных местах, ошибки, которые вы действительно хотите обнаружить до выпуска программы в свет!
• helgrind
является отладочной оболочкой, предназначенной для обнаружения состязания данных в многопоточных программах.
Наконец, руководство отмечает: