web-dev-qa-db-fra.com

Comment installer Valgrind sur macOS Mojave (10.14) avec Homebrew?

J'ai essayé d'installer Valgrind avec la commande brew install Valgrind et un message "Valgrind: cette formule ne fonctionne pas ou ne fonctionne pas comme prévu sur les versions macOS plus récentes que Sierra en raison d'une incompatibilité en amont. Erreur: une exigence non satisfaite a échoué construire."

J'ai essayé d'installer avec la commande brew intall --HEAD Valgrind à la place, après avoir installé avec succès les dépendances autoconf, automake et libtool, quand il essaie d'installer valgrind, j'obtiens une erreur de configuration:
"Valgrind fonctionne avec Darwin 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x et 17.x (Mac OS X 10.6/7/8/9/10/11 et macOS 10.12/13) "

Mon système d'exploitation est macOs Mojave (10.14). Cela signifie-t-il que je ne peux pas installer actuellement un Valgrind fonctionnel avec Homebrew?

42
Katherine Elyon

Une installation (plutôt pénible) de la solution source basée sur ce correctif , cet article et cette réponse .

$ git clone https://github.com/Echelon9/valgrind.git
$ cd valgrind
$ git checkout feature/v3.14/macos-mojave-support-v2
$ ./autogen.sh
$ ./configure --prefix=/where/you/want/it/installed --enable-only64bit
$ make

Si vous obtenez l'erreur suivante: No rule to make target '/usr/include/mach/mach_vm.defs’, vous devrez exécuter xcode-select --install. Vous devrez peut-être installer Xcode à partir de l'App Store si vous ne l'avez pas déjà. Une fois cela fait, vous devrez éditer le coregrind/Makefile:

Rechercher:

am__append_19 = \
    /usr/include/mach/mach_vm.defs \
        /usr/include/mach/task.defs \
        /usr/include/mach/thread_act.defs \
        /usr/include/mach/vm_map.defs

Après avoir vérifié que le dossier ci-dessous existe, préfixez chaque ligne avec:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

Le résultat final devrait être:

am__append_19 = \
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/mach_vm.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/task.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/thread_act.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/mach/vm_map.defs

Maintenant, exécutez à nouveau make et l'inclus devrait être trouvé. Mais cela ne signifie pas nécessairement qu'il va compiler. J'ai eu l'erreur suivante:

vg_preloaded.c:136:19: error: expected ';' before 'const'
 __private_extern__ const char *__crashreporter_info__ = "Instrumented by Valgrind " VERSION;

Un correctif pour cela consiste à ajouter la ligne suivante:

#define __private_extern__ extern

aux fichiers suivants:

  • coregrind/m_syscall.c
  • coregrind/m_syswrap/syswrap-darwin.c
  • coregrind/vg_preloaded.c

Enfin, vous devez croiser les doigts en espérant qu'aucune autre erreur ne se produise:

$ make
$ make install
24
alex.m

J'ai le même problème. Il semble que valgrind ne soit pas compatible avec le dernier macOS (10.14 Mojave). J'ai essayé de l'installer à la manière de High Sierra ( https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/ ) et a obtenu le même résultat que vous avez décrit. La seule solution que je puisse vous proposer actuellement est de travailler sur une machine virtuelle ( https://www.virtualbox.org/ ) ou d'utiliser Docker ( https: //www.gungorbudak. com/blog/2018/06/13/test de fuite de mémoire avec valgrind-sur-macos-using-docker-containers / ).

8
David Wichterle

Vous pouvez utiliser la version expérimentale de Valgrind pour macOS 10.14.5 Mojave à:

https://github.com/sowson/valgrind

La commande à utiliser est la suivante:

brew install --HEAD https://raw.githubusercontent.com/sowson/valgrind/master/valgrind.rb

Il est encore expérimental et a besoin de travail, mais pour des projets simples, cela fonctionne déjà ... Profitez-en!

7
Piotr Sowa

ajout: j'ai trouvé celui-ci qui fonctionnait pour moi sur mon OSX 10.14

brew install --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb

Une branche qui travaille pour obtenir OSX correct. quelque chose à nous aider jusqu'à ce que nous obtenions une vraie version de valgrind corrigée.

4
Meta.x.gdb

Pas une solution appropriée pour les macOs, mais pour le moment, j'ai créé une image de menu fixe. Après avoir installé docker pour macOS, voici comment démarrer valgrind:

cd </path/to/source/directory/where/you/want/run/valgrind/with>
curl -O https://raw.githubusercontent.com/biocyberman/ValgrindDocker/master/startValgrind
./startValgrind # this will takes time for the first time, because it needs to fetch docker valgrind image
# you will get a root command Prompt inside the docker image. 
# do what ever you want
# type 'exit' to quit
2
biocyberman

Vous pouvez suivre la réponse de alex.m pour obtenir valgrind, mais si vous l'utilisez sur un programme int main() { return 0; }, vous obtiendrez de nombreuses erreurs étranges et des alloc/free inexistants.

Pour "masquer" ces erreurs ennuyeuses, vous pouvez suivre ces étapes (c'est plus une solution de contournement qu'un correctif réel) (basé sur cette page du wiki et quelques recherches dans le code source de valgrind):

  • Commencez par créer et compiler un programme int main() { return 0; }.
  • Exécutez la commande suivante (pour créer un fichier contenant la suppression des erreurs):

valgrind --leak-check=full --show-reachable=yes --error-limit=no --gen-supressions=all --log-file=minimalraw.log ./minimal

cat ./minimalraw.log | ./parse_valgrind_suppressions.sh > minimal.supp

  • Copier et coller le contenu minimal.supp à la fin du fichier $YOUT_VALGRIND_INSTALLATION_PATH$/lib/default.supp

Et vous avez terminé! Les erreurs vous sont ignorées. Si vous souhaitez également supprimer les allocations, les libérations, etc. non existants, vous pouvez directement éditer le code source de valgrind. Ou juste utiliser heapusage pour le suivi de fuite

0
ByProcyx

Je viens de trouver une solution efficace pour utiliser VALGRIND sur mon Mac (Mojave 10.14.6). Il suffit de lancer cette commande:

installation de la bière --HEAD https://raw.githubusercontent.com/LouisBrunner/valgrind-macos/master/valgrind.rb

(De https://github.com/LouisBrunner/valgrind-macos )

J'espère que cela fonctionnera pour vous.

0
HenriBrg