Gcc 当Address Sanitizer说此平台不支持检测_泄漏时,我应该修复什么?

Gcc 当Address Sanitizer说此平台不支持检测_泄漏时,我应该修复什么?,gcc,memory-leaks,clang,address-sanitizer,Gcc,Memory Leaks,Clang,Address Sanitizer,我正在使用Clang在x86_64 OS X(MacOS 10.15.5 Catalina)上编译我的项目 我想准确地识别哪个文件、哪个函数、哪个行导致内存泄漏。我正在尝试使用,特别是 以下是我在编译时使用的标志: -Wall -Wextra -flto -O3 -march=native -ffast-math -fsanitize=address 它成功地编译了。但是,当我尝试使用运行时标志ASAN\u OPTIONS=detect\u leaks=1以启用泄漏消毒剂时,我看到以下错误:

我正在使用Clang在x86_64 OS X(MacOS 10.15.5 Catalina)上编译我的项目

我想准确地识别哪个文件、哪个函数、哪个行导致内存泄漏。我正在尝试使用,特别是

以下是我在编译时使用的标志:

-Wall -Wextra -flto -O3 -march=native -ffast-math -fsanitize=address
它成功地编译了。但是,当我尝试使用运行时标志
ASAN\u OPTIONS=detect\u leaks=1
以启用泄漏消毒剂时,我看到以下错误:

==26454==AddressSanitizer: detect_leaks is not supported on this platform.
Abort trap: 6
我做错了什么?我怎样才能解决这个问题

或者,有没有其他好的选择来代替Valgrind?Valgrind不适合我,因为1)我使用MacOS Catalina,2)我的程序运行在无限循环中。如果我是对的,Valgrind会在退出程序后显示消息,因此它不会工作

如果有人能就这个问题给我一些建议,我将不胜感激

我做错了什么

没什么。问题是您的Clang版本不支持泄漏检测。然而,看起来最新版本确实如此。见和

Valgrind在退出程序后显示消息,因此无法工作

您有点正确:默认情况下,Valgrind将仅在程序退出时执行泄漏分析

有两种解决方法:

  • 使您的程序在执行过程中的某个定义明确的位置退出,例如,在执行N次计算或绘制K帧等之后

  • 让你的程序执行VALGRIND\u DO\u LEAK\u CHECK

  • 如果您希望仅在某些条件保持时执行泄漏检查,并且很难从程序中检测这些条件是否正确,则可以使用GDB和请求Valgrind在需要时执行泄漏检查


  • 谢谢你的回答!很难相信我能找到一个好的解决方案来检测MacOS上的漏洞。我想知道人们是如何处理内存泄漏问题的。