繁体   English   中英

Valgrind是否支持Mac OS 10.8?

[英]Valgrind Support for Mac OS 10.8?

我在Mac OS 10.8.2中使用valgrind 3.8.1,并且使用Homebrew安装了Valgrind。

但是,当我尝试在我的代码上运行valgrind时,我从我的代码中甚至没有使用的库中得到了很多错误。

valgrind --leak-check=full ./a.out

==92079== 
==92079== HEAP SUMMARY:
==92079==     in use at exit: 70,861 bytes in 362 blocks
==92079==   total heap usage: 529 allocs, 167 frees, 75,151 bytes allocated
==92079== 
==92079== 16 bytes in 1 blocks are definitely lost in loss record 7 of 85
==92079==    at 0x54D7: malloc_zone_malloc (in /usr/local/Cellar/valgrind/3.8.1/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==92079==    by 0x373381: recursive_mutex_init (in /usr/lib/libobjc.A.dylib)
==92079==    by 0x372025: _objc_init (in /usr/lib/libobjc.A.dylib)
==92079==    by 0xBB27: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==92079==    by 0x7FFF5FC13377: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC13761: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC1006D: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC0FFC3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC0FEB9: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC01F9D: dyld::initializeMainExecutable() (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC05B03: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) (in /usr/lib/dyld)
==92079==    by 0x7FFF5FC01396: dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) (in /usr/lib/dyld)
.....
..... 
.....
.....
==92079== 
==92079== LEAK SUMMARY:
==92079==    definitely lost: 16,816 bytes in 16 blocks
==92079==    indirectly lost: 1,168 bytes in 5 blocks
==92079==      possibly lost: 4,941 bytes in 67 blocks
==92079==    still reachable: 47,936 bytes in 274 blocks
==92079==         suppressed: 0 bytes in 0 blocks
==92079== Reachable blocks (those to which a pointer was found) are not shown.
==92079== To see them, rerun with: --leak-check=full --show-reachable=yes
==92079== 
==92079== For counts of detected and suppressed errors, rerun with: -v
==92079== ERROR SUMMARY: 21 errors from 21 contexts (suppressed: 0 from 0)

谁能显示出如何抑制Mac OS 10.8的这些错误? (或者只是显示我的代码的错误)

抱歉,这不是您想要听到的,但是如果您运行valgrind ./a.out您应该会看到以下内容:

==18604== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==18604== WARNING: Expect incorrect results, assertions and crashes.
==18604== WARNING: In particular, Memcheck on 32-bit programs will fail to
==18604== WARNING: detect any errors associated with heap-allocated data.

即使您抑制了要抑制的内容,Valgrind也很可能无法帮助您调试程序。 如果您愿意使用Xcode,则可以使用它自己的内存分析工具(称为Instruments)。

valgrind v3.9.0解决了该问题。 尽管v3.9.0的官方发行说明指出对Mac OSX 10.8的支持已得到改进。 但它似乎在Mac OSX 10.9也能正常工作。

您可以在Homebrew上获取最新版本:

brew update
brew install valgrind

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM