MacOS Valgrind 替代品?

问题描述 投票:0回答:3

我正在运行 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 创建分区的好时机吗?或者我在安装时遗漏了什么?

c macos memory-leaks valgrind macos-big-sur
3个回答
6
投票

如评论中所述,Louis Brunner 的 github 存储库是您目前最好的选择。这应该至少给你一个最低限度的功能构建。

除了通常的版本号更改外,Big Sur 中的重大突破性更改之一是系统库由 dyld 缓存(和隐藏)。所以现在 Valgrind 无法读取

libsystem_malloc.dylib
以确定像
malloc
这样的函数的地址,以便它们可以被重定向。

如果有人想尝试一下,那么我的猜测是您需要遵循 这些说明,并更改 initimg-darwin.c 以使 dyld_cache_value 为“避免”。


2
投票

对于其他寻找答案的人,您可以使用 valgrind-macos,它是 macOS 上 Valgrind 的一个分支,正如 PhillipMills 所推荐的那样。 XCode 还提供了用于泄漏检查的工具。

但是,如果您不使用 XCode 并且不喜欢第一个选项,则可以尝试使用 Address/Leak Sanitizer。不同之处在于,您必须编译并链接其中一种消毒剂,但这只需要一个额外的标志,即

-fsanitize=address
。请注意,Apple Clang 不支持泄漏检查,因此您必须从 Brew 中获取 llvm。此外,您需要在可执行文件之前添加
ASAN_OPTIONS=detect_leaks=1


0
投票

另一种可能性是使用 XCode 附带的软件

leaks

用法示例:

leads --atExit -- {yourProgramWithArgs}

要了解更多信息,请使用

man leaks
leaks --help

© www.soinside.com 2019 - 2024. All rights reserved.