2012-11-16 2 views
8

Ich benutze Valgrind 3.8.1 mit Mac OS 10.8.2 Ich installierte Valgrind mit Homebrew.Valgrind Unterstützung für Mac OS 10.8?

Aber wenn ich versuche, den Valgrind auf meinem Code auszuführen, bekomme ich eine ganze Reihe von Fehlern aus den Bibliotheken, die ich nicht einmal in meinem Code verwendet habe.

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) 

Kann jemand zeigen, wie man diese Fehler für Mac OS 10.8 unterdrückt? (Oder zeigen Sie einfach die Fehler für meinen Code)

Antwort

2

valgrind v3.9.0 löst das Problem. Obwohl die offiziellen Versionshinweise für v3.9.0 besagt, dass die Unterstützung für Mac OSX 10.8 verbessert wurde. Aber es scheint auch Mac OSX 10.9 zu funktionieren.

Sie können die neueste Version auf Homebrew greifen:

brew update 
brew install valgrind 
2

Sorry, dass dies nicht das, was Sie hören wollen, aber wenn Sie valgrind ./a.out laufen sollten Sie eine Ausgabe entlang der Linien von

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

Auch sehen, ob Sie haben unterdrückt, was Sie unterdrücken wollten, Valgrind wird Ihnen höchstwahrscheinlich nicht helfen, Ihr Programm zu debuggen. Xcode wird mit einem eigenen Speicheranalyse-Tool namens "Instruments" geliefert, wenn Sie es verwenden möchten.