macos - 如何在 MacOS 上使用 clang 的 LeakSanitizer?
问题描述
我是 macOS 大苏尔。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,请使用clang
with -mlinker-version=450
flag 以避免链接器错误。
例子:
$ /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
推荐阅读
- sql - 递归查询加入Hierarchy Level表,统计二级hierarchies在division + Zipcode表中出现的次数
- javascript - lightslider如何去除圆点
- visual-studio-code - Visual Studio Code Arduino 扩展 - 串行监视器输入无行结束
- css - 如何设置用户输入的文本样式?
- c# - '/' 应用程序中的应用程序中的服务器错误,没有这样的主机是已知的
- r - 在 R Studio 中将多个变量传递给参数
- element-ui - 如何从 Element-UI 按需导入过渡
- c# - 如何读取 SSIS 脚本任务中的敏感参数值?
- ruby-on-rails - 在 Google Compute Engine 上运行的 Google 错误报告
- google-cloud-platform - 我可以让云构建连续运行所有触发的构建吗?