Релиз Valgrind 3.13.0, инструментария для выявления проблем при работе с памятью
Доступен релиз Valgrind 3.13.0, инструментария для отладки работы с памятью, обнаружения утечек памяти и профилирования. Работа Valgrind поддерживается для платформ Linux (X86, AMD64 ARM32, ARM64, PPC32, PPC64BE, PPC64LE, S390X, MIPS32, MIPS64), Android (ARM, ARM64, MIPS32, X86),Solaris (X86, AMD64) и macOS 10.12 (AMD64).
В новой версии:
- Проведена работа по обеспечению отладки крупных приложений, потребляющих очень много памяти. Расширен размер кэша. Максимальное число секторов увеличено с 24 до 48, а значение по умолчанию с 16 до 32. Общий размер памяти, который может использовать Valgrind увеличен с 64 до 128 Гб, т. е. теперь возможна отладка приложений, которым выделено до 60 Гб памяти. Адрес загрузки изменен с 0x3800'0000 на 0x5800'0000, что позволяет загружать крупные исполняемые файлы, размером до 1.2 Гб;
- Добавлена поддержка нового представления трассировок стека - "XTree", при котором раскладка памяти оформляется в виде дерева из трассировок стека и привязанных к ним данных. XTree применяется в таких утилитах, как Memcheck, Helgrind и Massif, для оценки заполнения кучи в приложении. Для управления формированием отчета добавлены опции "--xtree-memory=none|allocs|full" и "--xtree-memory-file=file". Отчет также может быть сгенерирован на лету при помощи команды мониторинга xtmemory в gdbserver. XTree может быть сохранен в двух форматах - callgrind (поддерживается в Memcheck) и massif, которые поддерживаются типовыми инструментами визуализации и анализа, такими как callgrind_annotate, KCachegrind и ms_print;
- Обновлен C++ demangler, декодировщик идентификаторов C++ ABI в оригинальный набор исходных идентификаторов кода C++. Добавлена поддержка декодирования ABI-идентификаторов для языка Rust;
- Устранена утечка памяти при чтении сжатых файлов debuginfo, которая мешала использованию Valgrind с данными debuginfo, созданными в gcc 7.0 при использовании флага "-gz";
- Добавлена поддержка набора инструкций ISA 3.0B для 64-разрядных процессоров POWER (ppc64);
- Для архитектур amd64 и x86 добавлена поддержка CET-префиксов (Control-flow Enforcement Technology) и решены проблемы со сбоем JIT при обработке длинных блоков кода AVX2;
- Для систем arm32 реализованы недостающие инструкции ARMv8;
- Для архитектур arm64, mips64 и mips32 представлена альтернативная реализация инструкций LL (Load-Linked) и SC (Store-Conditional), активируемая при помощи опции "--sim-hints=fallback-llsc" и решающая проблемы с зависаниями в некоторых ситуациях, при использовании реализации, строго соответствующей спецификации LL/SS;
- Улучшена поддержка платформы macOS 10.12;
- На платформе Linux улучшена обработка системного вызова clone в режиме CLONE_VFORK;
- Удален порт TileGX/Linux, который остался без поддержки и на практике не востребован;
- В Memcheck сокращено число ложных срабатываний при запуске оптимизированного кода, сгенерированного в Clang/LLVM. Добавлена поддержка формата xtree (опция "--xtree-memory" и команда 'xtmemory') и рализована опция 'leak_check xtleak' для создания отчета об утечках в формате xtree;
- В Massif добавлена поддержка формата xtree (опция "--xtree-memory" и команда 'xtmemory') и значительно сокращено потребления памяти и процессорных ресурсов;
- В Helgrind добавлена поддержка формата xtree (опция "--xtree-memory" и команда 'xtmemory') и возможность обработки клиентских запросов VALGRIND_HG_GNAT_DEPENDENT_MASTER_JOIN, востребованных для программ на языке Ada, скомпилированных компилятором gnat.