valgrind memcheck是否支持检查mmap

时间:2013-03-11 08:37:31

标签: c++ c memory-leaks valgrind mmap

我正在尝试valgrind来检测内存泄漏。它适用于堆泄漏(即来自malloc或new的内存分配)。但它是否支持在Linux中检查mmap泄漏?

由于 常

2 个答案:

答案 0 :(得分:6)

不直接,调试非常困难,请查看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.

答案 1 :(得分:2)

遗憾的是,valgrind的memcheck不支持mmap跟踪(至少不是开箱即用),但还是有希望的。

我最近遇到了 valgrind-mmt ,这是一个用于跟踪mmap内存访问和分配的valgrind分支: https://nouveau.freedesktop.org/wiki/Valgrind-mmt

它是由envytools开发的,似乎主要用于图形驱动程序的开发。

mmap跟踪工具mmt对所有对mmapped内存的访问(包括加载和存储)进行深度跟踪。这对于查找泄漏的mmap内存可能太繁琐了,需要对工具的输出进行处理和分析,但是经过一些仔细的工作,它可能对于检测mmap泄漏情况很有用。就我个人而言,使用它只获得了部分成功,但也许其他人会更幸运。

请注意,它可能不适合anonymous mmap allocations


入门: