webentwicklung-frage-antwort-db.com.de

Wie installiere ich Valgrind auf macOS Mojave (10.14) mit Homebrew?

Ich habe versucht, Valgrind mit dem Befehl brew install Valgrind Zu installieren und erhalte die Meldung "valgrind: Diese Formel wird auf MacOS-Versionen, die neuer als Sierra sind, aufgrund einer Inkompatibilität mit dem Original nicht kompiliert oder funktioniert nicht wie erwartet. Fehler: Eine nicht erfüllte Anforderung ist fehlgeschlagen dieser Build. "

Ich habe stattdessen versucht, mit dem Befehl brew intall --HEAD Valgrind Zu installieren. Nachdem ich die Abhängigkeiten autoconf, automake und libtool erfolgreich installiert habe, erhalte ich beim Versuch, valgrind zu installieren, einen Konfigurationsfehler:
"Valgrind funktioniert unter Darwin 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x und 17.x (Mac OS X 10.6/7/8/9/10/11 und macOS 10.12/13)

Mein Betriebssystem ist macOs Mojave (10.14). Bedeutet das, dass ich derzeit kein funktionierendes Valgrind mit Homebrew installieren kann?

42
Katherine Elyon

Eine (ziemlich schmerzhafte) Installation aus dem Quellcode, die auf diesem Patch , diesem Beitrag und dieser Antwort basiert.

$ 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

Wenn Sie die folgende Fehlermeldung erhalten: No rule to make target '/usr/include/mach/mach_vm.defs’, Müssen Sie xcode-select --install Ausführen. Möglicherweise müssen Sie Xcode aus dem App Store installieren, wenn Sie es noch nicht haben. Sobald dies erledigt ist, müssen Sie den coregrind/Makefile Bearbeiten:

Suchen nach:

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

Stellen Sie nach der doppelten Überprüfung des folgenden Ordners jeder Zeile Folgendes voran:

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

Das Endergebnis sollte sein:

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

Führen Sie nun make erneut aus und die Includes sollten gefunden werden. Das heißt aber nicht unbedingt, dass es kompiliert wird. Ich habe folgende Fehlermeldung erhalten:

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

Ein Fix dafür ist das Hinzufügen der folgenden Zeile:

#define __private_extern__ extern

zu den folgenden Dateien:

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

Schließlich müssen Sie die Daumen drücken, in der Hoffnung, dass keine weiteren Fehler auftreten:

$ make
$ make install
24
alex.m

Ich habe das gleiche Problem. Es scheint, dass Valgrind nicht mit dem neuesten MacOS (10.14 Mojave) kompatibel ist. Versucht es auf die High Sierra Art zu installieren ( https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/ ) und bekam die gleiche Ausgabe, die Sie beschrieben haben. Die einzige Lösung, die ich Ihnen derzeit anbieten kann, ist die Arbeit an einer virtuellen Maschine ( https://www.virtualbox.org/ ) oder die Verwendung von Docker ( https://www.gungorbudak). com/blog/2018/06/13/Speicherleck-Test-mit-Valgrind-auf-Macos-mit-Docker-Containern / ).

8
David Wichterle

Sie können die experimentelle Version von Valgrind für macOS 10.14.5 Mojave verwenden unter:

https://github.com/sowson/valgrind

Der Befehl, um es zu verwenden, ist:

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

Es ist noch experimentell und braucht etwas Arbeit, aber für einfache Projekte funktioniert es bereits ... Viel Spaß!

7
Piotr Sowa

zusätzlich: ich fand, dass dieses für mich auf meinem OSX 10.14 arbeitete

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

Ein Zweig, der arbeitet, um OSX korrekt zu machen. etwas, um uns zu überraschen, bis wir eine echte Valgrind-Version repariert haben.

4
Meta.x.gdb

Keine richtige Lösung für MacOs, aber vorerst habe ich ein Docker-Image erstellt. Nach der Installation von docker für macOS starten Sie valgrind wie folgt:

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

Sie können der Antwort von alex.m folgen, um valgrind zu erhalten, aber wenn Sie es in einem int main() { return 0; } -Programm verwenden, werden Sie viele seltsame Fehler und nicht vorhandene Zuordnungen/free erhalten.

Um diese ärgerlichen Fehler zu "verbergen", können Sie die folgenden Schritte ausführen (dies ist eher eine Problemumgehung als eine echte Lösung) (basierend auf dieser Wiki-Seite und einigen Recherchen im Valgrind-Quellcode):

  • Erstellen und kompilieren Sie zunächst ein int main() { return 0; } -Programm.
  • Führen Sie den folgenden Befehl aus (um eine Datei mit Fehlerunterdrückung zu erstellen):

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

  • Kopieren und Einfügen minimal.supp Inhalt am Ende von $YOUT_VALGRIND_INSTALLATION_PATH$/lib/default.supp Datei

Und du bist fertig! Fehler werden ignoriert. Wenn Sie auch die nicht vorhandenen Zuordnungen, Freigaben usw. entfernen möchten, können Sie den Quellcode von valgrind direkt bearbeiten. Oder verwenden Sie heapusage für die Leckverfolgung

0
ByProcyx

Ich habe gerade eine funktionierende Lösung für die Verwendung von VALGRIND auf meinem Mac gefunden (Mojave 10.14.6). Führen Sie einfach diesen Befehl aus:

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

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

Hoffe, es wird für Sie arbeiten.

0
HenriBrg