Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Valgrind Support for Mac OS 10.8?

I am using valgrind 3.8.1 with Mac OS 10.8.2 I installed Valgrind using Homebrew.

But when I try to run the valgrind on my code, I get a whole bunch of errors from the libraries that I haven't even used in my code.

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)

Can anyone show how to suppress these errors for Mac OS 10.8? (Or Just show the errors for my code)

like image 678
zeronone Avatar asked Nov 16 '12 16:11

zeronone


2 Answers

Sorry that this won't be what you want to hear, but if you run valgrind ./a.out you should see output along the lines of

==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.

Even if you suppressed what you wanted to suppress, Valgrind will most likely not help you in debugging your program. Xcode comes with its own memory analysis tool called Instruments if you care to use that.

like image 112
user1613254 Avatar answered Sep 18 '22 04:09

user1613254


valgrind v3.9.0 resolves the issue. Although the official release notes for v3.9.0 states that the support for Mac OSX 10.8 has been improved. But it seems to work fine on Mac OSX 10.9 too.

You can grab the latest version on Homebrew:

brew update
brew install valgrind
like image 32
zeronone Avatar answered Sep 18 '22 04:09

zeronone