Поддерживает ли valgrind memcheck проверку mmap

Я пытаюсь valgrind для обнаружения утечки памяти. Он хорошо работает при утечке кучи (то есть выделение памяти из malloc или new). однако поддерживает ли проверка mmap утечки в Linux?

Спасибо
Чанг

7

Решение

Не напрямую, очень сложно отлаживать, посмотрите valgrind.h

   VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a
heap block -- that will be used by the client program -- is allocated.
It's best to put it at the outermost level of the allocator if possible;
for example, if you have a function my_alloc() which calls
internal_alloc(), and the client request is put inside internal_alloc(),
stack traces relating to the heap block will contain entries for both
my_alloc() and internal_alloc(), which is probably not what you want.

For Memcheck users: if you use VALGRIND_MALLOCLIKE_BLOCK to carve out
custom blocks from within a heap block, B, that has been allocated with
malloc/calloc/new/etc, then block B will be *ignored* during leak-checking
-- the custom blocks will take precedence.

VALGRIND_FREELIKE_BLOCK is the partner to VALGRIND_MALLOCLIKE_BLOCK.  For
Memcheck, it does two things:

- It records that the block has been deallocated.  This assumes that the
block was annotated as having been allocated via
VALGRIND_MALLOCLIKE_BLOCK.  Otherwise, an error will be issued.

- It marks the block as being unaddressable.

VALGRIND_FREELIKE_BLOCK should be put immediately after the point where a
heap block is deallocated.
6

Другие решения

К сожалению, memcheck от Valgrind не поддерживает отслеживание mmap (по крайней мере, не из коробки), но есть надежда.

Я недавно сталкивался Valgrind-MMT, Valgrind-форк для отслеживания доступа к памяти в mmap и ее распределения:
https://nouveau.freedesktop.org/wiki/Valgrind-mmt

Разработано envytools, и, кажется, используется в основном для разработки графических драйверов.

Инструмент трассировки mmap, mmt, делает глубокую трассировку на все доступ к mmapped памяти, в том числе загрузки и хранения. Это может быть слишком много для работы по обнаружению утечки памяти mmap, и выходные данные инструмента должны быть обработаны и проанализированы, но при некоторой тщательной работе это может быть полезно для обнаружения сценариев утечки mmap. Лично я пользовался этим лишь частично, но, возможно, другим повезет больше.

Обратите внимание, что он может не подходить для анонимные распределения mmap.


Для начала:

  • Клонировать и построить репозиторий envytools / envytools
  • Клонировать и построить Envytools / Valgrind хранилище
  • Запустите valgrind со следующими параметрами:

    /usr/local/bin/valgrind --tool=mmt --mmt-trace-file=[mmapped-file-to-be-traced] --log-file=mmt-log.bin

  • Расшифровать вывод MMT: demmt -l mmt-log.bin > mmt-log.txt

2

По вопросам рекламы [email protected]