Mac OS:泄漏消毒剂
Mac OS: Leaks 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;
}
然后构建它并运行测试如何检测到内存泄漏:
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$
如何检测泄漏?
我需要将它用于我的大型应用程序。
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
请注意,您还可以使用 Xcode 附带的 Leaks Instrument 来查找代码中的泄漏,而无需安装任何额外的东西。它的广告不是很好,但它是一个非常有用的工具。从 "Product" 菜单中选择 "Profile"。这可能会重建您的应用程序,然后它将启动 Instruments.app。您将看到 sheet 种不同的分析工具,您可以像这样使用:
一旦您选择它并按下 "record" 按钮,它将 运行 您的应用程序并显示一条显示任何泄漏的轨道,如下所示:
绿色复选标记表示当时应用程序没有泄漏。红色 "x" 表示自上次检查以来出现新泄漏。灰色“-”表示有泄漏,但自上次检查后没有新泄漏。默认为每 10 秒检查一次。
底部是当前泄漏的列表。如果单击其中一个,您将在右侧看到一个堆栈跟踪,显示哪个函数分配了泄漏的内存。
这是一个非常强大的工具,几乎没有文档!我不确定为什么 Apple 会如此隐藏它。
如果您使用 CLion,您可以试试这个设置:
在首选项中 |构建、执行、部署 | CMake -> Cmake 选项
使用
-DCMAKE_BUILD_TYPE=ASAN -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++
和
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$
如何检测泄漏? 我需要将它用于我的大型应用程序。
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
请注意,您还可以使用 Xcode 附带的 Leaks Instrument 来查找代码中的泄漏,而无需安装任何额外的东西。它的广告不是很好,但它是一个非常有用的工具。从 "Product" 菜单中选择 "Profile"。这可能会重建您的应用程序,然后它将启动 Instruments.app。您将看到 sheet 种不同的分析工具,您可以像这样使用:
一旦您选择它并按下 "record" 按钮,它将 运行 您的应用程序并显示一条显示任何泄漏的轨道,如下所示:
绿色复选标记表示当时应用程序没有泄漏。红色 "x" 表示自上次检查以来出现新泄漏。灰色“-”表示有泄漏,但自上次检查后没有新泄漏。默认为每 10 秒检查一次。
底部是当前泄漏的列表。如果单击其中一个,您将在右侧看到一个堆栈跟踪,显示哪个函数分配了泄漏的内存。
这是一个非常强大的工具,几乎没有文档!我不确定为什么 Apple 会如此隐藏它。
如果您使用 CLion,您可以试试这个设置:
在首选项中 |构建、执行、部署 | CMake -> Cmake 选项 使用
-DCMAKE_BUILD_TYPE=ASAN -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++
和