Я попытался установить 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?
Я пробовал это, но он по-прежнему показывает те же сообщения ...
вот последний статус, который я могу найти. tl; dr: еще не готов. mail-archive.com/[email protected]/msg285805.html

У меня такая же проблема. Похоже, что 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.ccoregrind/m_syswrap/syswrap-darwin.ccoregrind/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
Чтобы добавить к этому, вам, возможно, придется изменить "/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».
К сожалению, у меня это не сработало. 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) .."
Я хотел бы добавить, что для запуска ./autogen.sh требуется установка пакета "automake". Вы можете сделать это с помощью: brew install automake
Это не может быть скомпилировано в macOS 10.14.6 с Xcode 11.2.1. Получаю ошибку "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach/task.defs", line 509: type 'task_exc_guard_behavior_t' not defined
Вы можете следовать ответу 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$
.supp: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.
Там написано Error: The following directories are not writable by your user: /usr/local/share/man/man5
дополнение: я обнаружил, что это работало для меня на моем 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.
Я только что нашел рабочее решение для использования 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.
Возможно, попробуйте
brew edit valgrindи замените «sourceware.org/git/valgrind.git» на «git: //sourceware.org/git/valgrind.git» в разделе заголовка формулы.