首页 > 解决方案 > Mac OS:泄漏消毒剂

问题描述

Mac OS X 塞拉利昂 10.13

我按照这里写的 https://clang.llvm.org/docs/LeakSanitizer.html

即创建了内存泄漏的小应用程序

#include <stdlib.h>
void *p;
int main() {
  p = malloc(7);
  p = 0; // The memory is leaked here.
  return 0;
}

然后构建它并运行以测试如何检测到内存泄漏:

admins-Mac:test2 admin$ clang -fsanitize=address -g mleak.c ; ASAN_OPTIONS=detect_leaks=1 ./a.out
==556==AddressSanitizer: detect_leaks is not supported on this platform.
Abort trap: 6
admins-Mac:test2 admin$ 

如何检测泄漏?我需要将它用于我的大型应用程序。

标签: macosmemory-leaksaddress-sanitizer

解决方案


Apple 提供的 Clang/LLVM 似乎没有-fsanitize=leak支持。我通过在 Homebrew 上安装 LLVM 来修复它。更详细的修复在gist

$ brew install llvm@8

# Overwritten default Clang
$ echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> .zshrc

$ source ~/.zshrc
$ which clang
/usr/local/opt/llvm/bin/clang

推荐阅读