web-dev-qa-db-ja.com

HomebrewでmacOS Mojave(10.14)にValgrindをインストールする方法は?

コマンドbrew install Valgrindを使用してValgrindをインストールしようとすると、「valgrind:この式は、アップストリームの非互換性のためにSierraより新しいmacOSバージョンで期待どおりにコンパイルまたは機能しません。ビルド。」

代わりにbrew intall --HEAD Valgrindコマンドを使用してインストールしようとしましたが、依存関係autoconf、automake、libtoolを正常にインストールした後、valgrindをインストールしようとすると、構成エラーが発生します。
"Valgrindは、Darwin 10.x、11.x、12.x、13.x、14.x、15.x、16.x、および17.xで動作します(Mac OS X 10.6/7/8/9/10/11およびmacOS 10.12/13)」

私のOSはmacOs Mojave(10.14)であるため、Homebrewで機能するValgrindを現在インストールできないということですか?

42
Katherine Elyon

this patchthis post 、および this answer に基づくソースの回避策からの(やや痛い)インストール。

$ 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

次のエラーが表示される場合:No rule to make target '/usr/include/mach/mach_vm.defs’xcode-select --installを実行する必要があります。 Xcodeをまだお持ちでない場合は、アプリストアからインストールする必要があります。それが完了したら、coregrind/Makefileを編集する必要があります。

検索する:

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

以下のフォルダーが存在することを再確認した後、すべての行に次のプレフィックスを付けます。

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

最終結果は次のとおりです。

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

ここでmakeを再度実行すると、インクルードが見つかるはずです。しかし、それは必ずしもコンパイルするという意味ではありません。次のエラーが表示されました。

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

これを修正するには、次の行を追加します。

#define __private_extern__ extern

次のファイルに:

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

最後に、他のエラーが表示されないことを期待して指を交差させる必要があります。

$ make
$ make install
24
alex.m

私は同じ問題を抱えています。 valgrindは最新のmacOS(10.14 Mojave)と互換性がないようです。 High Sierraの方法でインストールを試みました( https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/ )そして、あなたが説明したのと同じ出力を得ました。今すぐ提供できる唯一のソリューションは、仮想マシンで作業する( https://www.virtualbox.org/ )か、Dockerを使用する(- https://www.gungorbudak。 com/blog/2018/06/13/memory-leak-testing-with-valgrind-on-macos-using-docker-containers / )。

8
David Wichterle

MacOS 10.14.5 Mojave用のValgrindの実験版は次の場所で使用できます。

https://github.com/sowson/valgrind

それを使用するコマンドは次のとおりです。

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

それはまだ実験的であり、いくつかの作業が必要ですが、単純なプロジェクトでは既に動作しています...お楽しみください!

7
Piotr Sowa

さらに、OSX 10.14でこれが機能していることがわかりました

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

OSXを正しく取得するために機能しているブランチ。実際のvalgrindのバージョンが修正されるまで、私たちを奮い立たせるものです。

4
Meta.x.gdb

MacOには適切なソリューションではありませんが、当分の間、Dockerイメージを作成しました。 macOS用のdockerをインストールした後、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

Alex.mの回答に従ってvalgrindを取得できますが、int main() { return 0; }プログラムで使用すると、多くの奇妙なエラーと、存在しないallocs/freeが発生します。

これらの迷惑なエラーを「隠す」には、次の手順を実行します(実際の修正よりも回避策です)( このwikiページ およびvalgrindソースコードの調査に基づいています)。

  • まず、int main() { return 0; }プログラムを作成してコンパイルします。
  • 次のコマンドを実行します(エラー抑制を含むファイルを作成します)。

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

  • minimal.suppファイルの最後に$YOUT_VALGRIND_INSTALLATION_PATH$/lib/default.suppコンテンツをコピーして貼り付けます

これで完了です!エラーは無視されます。存在しないallocやfreeなども削除したい場合は、valgrindのソースコードを直接編集できます。または、漏れ追跡にheapusageを使用します

0
ByProcyx

Mac(Mojave 10.14.6)でVALGRINDを使用する実用的なソリューションを見つけました。このコマンドを実行するだけです:

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

https://github.com/LouisBrunner/valgrind-macos から)

それがあなたのために働くことを願っています。

0
HenriBrg