我正在运行 MacOS Big Sur 并尝试安装
valgrind
进行作业。
brew install valgrind
当前不工作,从 tar.bz2 发行版安装也不行。
运行
./configure
(根据自述文件说明)最后返回:
checking for a supported OS... ok (darwin20.1.0)
checking for the kernel version... unsupported (20.1.0)
configure: error: 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)
从这一点来看,
valgrind
似乎在最近的几个 MacOS 版本中不起作用。
当前的 MacOS 版本是否有替代方案,或者现在是我在硬盘驱动器上为 Linux 创建分区的好时机吗?或者我在安装时遗漏了什么?
如评论中所述,Louis Brunner 的 github 存储库是您目前最好的选择。这应该至少给你一个最低限度的功能构建。
除了通常的版本号更改外,Big Sur 中的重大突破性更改之一是系统库由 dyld 缓存(和隐藏)。所以现在 Valgrind 无法读取
libsystem_malloc.dylib
以确定像 malloc
这样的函数的地址,以便它们可以被重定向。
如果有人想尝试一下,那么我的猜测是您需要遵循 这些说明,并更改 initimg-darwin.c 以使 dyld_cache_value 为“避免”。
对于其他寻找答案的人,您可以使用 valgrind-macos,它是 macOS 上 Valgrind 的一个分支,正如 PhillipMills 所推荐的那样。 XCode 还提供了用于泄漏检查的工具。
但是,如果您不使用 XCode 并且不喜欢第一个选项,则可以尝试使用 Address/Leak Sanitizer。不同之处在于,您必须编译并链接其中一种消毒剂,但这只需要一个额外的标志,即
-fsanitize=address
。请注意,Apple Clang 不支持泄漏检查,因此您必须从 Brew 中获取 llvm。此外,您需要在可执行文件之前添加ASAN_OPTIONS=detect_leaks=1
。
另一种可能性是使用 XCode 附带的软件
leaks
。
用法示例:
leads --atExit -- {yourProgramWithArgs}
要了解更多信息,请使用
man leaks
或leaks --help
。