Ole*_*leg 8 macos memory-leaks address-sanitizer
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;
}
Run Code Online (Sandbox Code Playgroud)
然后构建并运行以测试如何检测内存泄漏:
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$
Run Code Online (Sandbox Code Playgroud)
我如何检测泄漏?我需要将它用于我的大型应用程序。
Dat*_*yen 11
苹果自带的 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
Run Code Online (Sandbox Code Playgroud)
请注意,您还可以使用 Xcode 附带的 Leaks Instrument 来查找代码中的泄漏,而无需安装任何额外的东西。它的宣传不是很好,但它是一个非常有用的工具。从“产品”菜单中,选择“配置文件”。这可能会重建您的应用程序,然后它将启动 Instruments.app。您将看到一张不同的分析工具,您可以像这样使用:
一旦您选择它并按下“记录”按钮,它将运行您的应用程序并显示一条轨道,向您显示任何泄漏,如下所示:
绿色勾号表示应用程序当时没有泄漏。红色“x”表示自上次检查以来出现新泄漏。灰色“-”表示存在泄漏,但自上次检查以来没有新的泄漏。默认是每 10 秒检查一次。
底部是当前泄漏的列表。如果单击其中一个,您将在右侧看到堆栈跟踪,显示哪个函数分配了泄漏的内存。
这是一个非常强大的工具,几乎没有文档!我不知道苹果为什么把它隐藏得如此之深。
| 归档时间: |
|
| 查看次数: |
5046 次 |
| 最近记录: |