C++ valgrind memcheck是否支持检查mmap

C++ valgrind memcheck是否支持检查mmap,c++,c,memory-leaks,valgrind,mmap,C++,C,Memory Leaks,Valgrind,Mmap,我正在尝试valgrind检测内存泄漏。它可以很好地处理堆泄漏(即从malloc或new分配内存)。但是,它是否支持在linux中检查mmap泄漏 谢谢 Chang不直接调试,很难调试,请查看 遗憾的是,valgrind的memcheck不支持mmap跟踪(至少不支持开箱即用),但还是有希望的 我最近遇到了valgrind mmt,一种用于跟踪mmap内存访问和分配的valgrind fork: 它是由开发的,似乎主要用于图形驱动程序的开发 mmap跟踪工具,mmt,对所有对mmap内存的访问

我正在尝试valgrind检测内存泄漏。它可以很好地处理堆泄漏(即从malloc或new分配内存)。但是,它是否支持在linux中检查mmap泄漏

谢谢
Chang

不直接调试,很难调试,请查看


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

我最近遇到了valgrind mmt,一种用于跟踪mmap内存访问和分配的valgrind fork:

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

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

请注意,它可能不适用于


对于入门:

  • 克隆并构建
  • 克隆并构建
  • 使用以下参数运行valgrind:

    /usr/local/bin/valgrind--tool=mmt--mmt跟踪文件=[mmapped file to tracked]--log file=mmt log.bin

  • 解码mmt输出:
    demmt-l mmt-log.bin>mmt log.txt

   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.