web-dev-qa-db-fra.com

Existe-t-il des alternatives à valgrind sur Mac OS X Mountain Lion et Mavericks pour détecter les fuites de mémoire pour les applications C / C ++?

J'avais l'habitude d'utiliser valgrind pour détecter les fuites de mémoire pour mes applications C/C++ sur Mac OS X 10.6 (Snow Leopard) et 10.7 (Lion), mais je trouve que ce n'est pas pris en charge sur les récents des versions comme 10.8 (Mountain Lion) et 10.9 (Mavericks) lorsque j'ai mis à niveau mon système d'exploitation. Y a-t-il autre chose comme valgrind qui peut être installé sur Mac OS X 10.9?

41
hago

Le 01/11/2013, l'équipe valgrind a annoncé Valgrind 3.9.0:

Nous sommes heureux d'annoncer une nouvelle version de Valgrind, version 3.9.0, disponible sur http://www.valgrind.org .

3.9.0 est une version avec de nombreuses améliorations et la collection habituelle de corrections de bugs. Cette version ajoute la prise en charge des instructions MIPS64/Linux, Intel AVX2 et POWER8. La prise en charge DFP a été ajoutée pour S390. La prise en charge initiale de la mémoire transactionnelle matérielle a été ajoutée pour les plates-formes Intel et POWER. La prise en charge de Mac OS X 10.8 (Mountain Lion) a été améliorée. La précision de Memcheck sur le code vectorisé a été améliorée.

Il reste à voir si le support amélioré de Mountain Lion signifie qu'il fonctionne bien pour Mavericks. Il mentionne que le support est uniquement pour le code 64 bits.

[... le temps passe ... les téléchargements se produisent ... les espoirs sont augmentés ... la configuration est tentée ... les espoirs sont anéantis ...]

Urgh!

...
checking build system type... x86_64-Apple-darwin13.0.0
checking Host system type... x86_64-Apple-darwin13.0.0
checking for a supported CPU... ok (x86_64)
checking for a 64-bit only build... no
checking for a 32-bit only build... no
checking for a supported OS... ok (darwin13.0.0)
checking for the kernel version... unsupported (13.0.0)
configure: error: Valgrind works on Darwin 10.x and 11.x (Mac OS X 10.6/7)

Mountain Lion est basé sur Darwin 12.x; Mavericks est basé sur Darwin 13.x. Je ne suis pas sûr de la messagerie dans les messages d'erreur, mais hors de la boîte, Valgrind 3.9.0 ne compile pas sur OS X Mavericks.

12
Jonathan Leffler

Juste pour que vous le sachiez, vous n'aurez peut-être pas à attendre longtemps pour voir Valgrind travailler sur Mac 10.9 a.k.a Maverick. Comme il y a eu un certain succès selon ce rapport de bogue .

À mon avis, il n'existe actuellement (au 15 novembre 2013) aucune alternative Valgrind pour le Mac. Cependant, il y en a certains à surveiller, à savoir Clang qui a les deux AddressSanitizer (fonctionne sur les macs actuels) et MemorySanitizer (macs pas encore pris en charge).

Il existe des suggestions pour utiliser les instruments de Xcode, mais je ne l'ai pas trouvé utile du tout.

11
chutsu

En plus des instruments mentionnés par @Charlie_Burns ci-dessus, il y a aussi l'analyseur statique qui peut vous renseigner sur certaines de ces choses simplement en analysant votre code. Dans votre projet Xcode, sélectionnez simplement "Analyser" dans le menu "Produit". Il appelle l'analyseur statique clang. Je pense que vous pouvez également utiliser clang directement depuis la ligne de commande si vous le souhaitez, même si je ne l'ai pas fait.

Sur la ligne de commande, vous avez également accès à la commande leaks et à la commande dtrace.

7
user1118321