Релиз 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 Гб памяти. Адрес загрузки изменён с 0×3800'0000 на 0×5800'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.

© OpenNet