如何在MacOS上使用clang的LeakSanitizer?

anta40

我是macOS Big Sur。AFAIK,Valgrind还不支持此操作系统。至少我试过

经过一番谷歌搜索后,我切换到LeakSanitizier并测试了以下C代码:

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

这篇文章指出macOS附带的clang没有-fsanitize=address启用支持。所以我从自制软件安装了clang:

/usr/local/opt/llvm/bin/clang --version
clang version 11.0.0
Target: x86_64-apple-darwin20.1.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin

好的,让我们尝试一下:

Ancalagon:Codes anta40$ /usr/local/opt/llvm/bin/clang -g -fsanitize=address leak1.c -o leak1
Ancalagon:Codes anta40$ ./leak1
Ancalagon:Codes anta40$

没发生什么事。也许尝试llvm-symbolizer

Ancalagon:Codes anta40$ /usr/local/opt/llvm/bin/llvm-symbolizer ./leak1
./leak1

结果相同。也许我在这里想念什么?

古德

要启用LeakSanitizer设置ASAN_OPTIONS=detect_leaks=1或使用-fsanitize=leak标志。

另外,根据,如果使用clang版本11.0和Xcode版本11.3,请使用clangwith-mlinker-version=450标志以避免链接程序错误。

例:

$ /usr/local/opt/llvm/bin/clang -g -fsanitize=address leak1.c -o leak1
$ ASAN_OPTIONS=detect_leaks=1 ./leak1

要么

$ /usr/local/opt/llvm/bin/clang -g -fsanitize=leak leak1.c -o leak1
$ ./leak1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章