Как установить Valgrind на macOS Mojave (10.14) с Homebrew?

Я попытался установить Valgrind с brew install Valgrind и получил:

valgrind: This formula either does not compile or function as expected
on macOS versions newer than Sierra due to an upstream
incompatibility. 
Error: An unsatisfied requirement failed this build.

Пробовал brew install --HEAD Valgrind.

Вместо этого после успешной установки зависимостей autoconf, automake и libtool, когда он пытается установить valgrind, я получаю ошибку конфигурации:

Valgrind works on Darwin 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x and
17.x (Mac OS X 10.6/7/8/9/10/11 and macOS 10.12/13)

Моя ОС - macOS Mojave (10.14), значит ли это, что сейчас я не могу установить работающий Valgrind с Homebrew?

Возможно, попробуйте brew edit valgrind и замените «sourceware.org/git/valgrind.git» на «git: //sourceware.org/git/valgrind.git» в разделе заголовка формулы.

l'L'l 10.10.2018 05:14

Я пробовал это, но он по-прежнему показывает те же сообщения ...

Katherine Elyon 10.10.2018 08:43

вот последний статус, который я могу найти. tl; dr: еще не готов. mail-archive.com/[email protected]/msg285805.html

cambunctious 12.11.2018 04:26
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
67
3
40 930
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

У меня такая же проблема. Похоже, что 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/).

Не подходящее решение для macOs, но пока я создал образ докера. После установки docker для macOS, как запустить 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
Ответ принят как подходящий

Обходной путь (довольно болезненный) установка из исходного кода на основе этот патч, эта почта и этот ответ.

$ 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

Мне удалось установить valgrind с помощью приведенных выше инструкций в MacOS Mojave 10.14.13 без добавления исправления в файлы: coregrind / m_syscall.c, coregrind / m_syswrap / syswrap-darwin.c, coregrind / vg_preloaded.c

Hryhorii Liashenko 03.03.2019 01:25

Чтобы добавить к этому, вам, возможно, придется изменить "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX‌ .platform / Developer / ‌ SDKs / MacOSX10.14.sdk‌", чтобы отразить вашу версию SDK. В моем случае это был «MacOSX10.11.sdk». Поэтому в моем случае путь был «/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX‌ .platform / Developer / ‌ SDK / MacOSX10.11.sdk‌».

HXSP1947 16.03.2019 00:26

К сожалению, у меня это не сработало. Mac OS 10.14.4. Я закончил с этой ошибкой "Неопределенные символы для архитектуры x86_64:" _mach_msg_destroy ", на которую ссылается: __kernelrpc_mach_vm_allocate в libcoregrind-amd64-darwin.a (libcoregrind_amd64_darwin_a-mach‌ _vmUser.o) .."

Ajay 04.04.2019 23:43

Я хотел бы добавить, что для запуска ./autogen.sh требуется установка пакета "automake". Вы можете сделать это с помощью: brew install automake

camelCaseCowboy 11.06.2019 21:33

Это не может быть скомпилировано в macOS 10.14.6 с Xcode 11.2.1. Получаю ошибку "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX‌​.platform/Developer/‌​SDKs/MacOSX.sdk/usr/‌​include/mach/task.de‌​fs", line 509: type 'task_exc_guard_behavior_t' not defined

Bri Bri 13.11.2019 20:27

Вы можете следовать ответу alex.m, чтобы получить valgrind, но если вы используете его в программе int main() { return 0; }, вы получите много странных ошибок и несуществующие allocs / free.

Чтобы «скрыть» эти досадные ошибки, вы можете выполнить следующие шаги (это скорее обходной путь, чем реальное исправление) (на основе эта страница вики и некоторых исследований в исходном коде Valgrind):

  • Сначала создайте и скомпилируйте программу int main() { return 0; }.
  • Выполните следующую команду (чтобы создать файл, содержащий подавление ошибок):

valgrind --leak-check=full --show-reachable=yes --error-limit=no --gen-supressions=all --log-file=$YOUR_LOG$ $YOUR_BINARY$

cat ./$YOUR_LOG$ | ./$YOUR_SCRIPT_FILE$ > minimal.supp

  • Скопируйте и вставьте содержимое minimal.supp в конец файла $YOUR_VALGRIND_INSTALLATION_PATH$/lib/valgrind/default.supp

Готово! Странные и несуществующие ошибки будут проигнорированы. Если вы также хотите удалить несуществующие alloc, free и т. д., Вы можете напрямую отредактировать исходный код Valgrind. Или просто используйте heapusage для отслеживания утечек

Вы можете использовать экспериментальную версию Valgrind для macOS 10.14.5 Mojave по адресу:

https://github.com/sowson/valgrind

Команда для его использования:

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

Он все еще экспериментален и требует некоторой доработки, но для простых проектов уже работает ... Наслаждайтесь!

Сегодня я синхронизировался с исходным репозиторием valgrind с патчем и протестировал с Mojave 10.14.6, дело в том, что он все еще работает для простых проектов, но не для сложных. Может быть, кто-то присоединится к нам в качестве участника, чтобы помочь? : D.

Piotr Sowa 23.07.2019 12:26

Там написано Error: The following directories are not writable by your user: /usr/local/share/man/man5

ajaysinghnegi 17.05.2020 18:26

дополнение: я обнаружил, что это работало для меня на моем OSX 10.14

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

Ветвь, которая работает над исправлением OSX. что-то, что поможет нам, пока мы не исправим настоящую версию valgrind.

К сожалению, теперь это не работает на macOS 10.14.6 с Xcode 11.2.1.

Bri Bri 13.11.2019 20:29

Я только что нашел рабочее решение для использования VALGRIND на моем Mac (Mojave 10.14.6). Просто запустите эту команду:

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

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

Надеюсь, это сработает для вас.

По состоянию на 30 ноября 2019 г. возможно использование строить для OS X 10.14.6 через https://github.com/sowson/valgrind и https://github.com/LouisBrunner/valgrind-macos.

тем не мение, есть много ошибок теста (см. Ссылку LouisBrunner), шум во время выполнения и SEGV при работе с нетривиальными программами: установка, ну, устанавливается. YMMV.

(работает на Mojave 10.14.6)

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

Как уже упоминалось, Луи Бруннер поддерживает рабочую версию на https://github.com/LouisBrunner/valgrind-macos.

brew tap LouisBrunner/valgrind
brew install --HEAD LouisBrunner/valgrind/valgrind

У меня это сработало для MacOS 10.15.7 Catalina.

Другие вопросы по теме