gpt4 book ai didi

gcc - 当 Address Sanitizer 说该平台不支持 detect_leaks 时,我应该解决什么问题?

转载 作者:行者123 更新时间:2023-12-03 19:10:41 24 4
gpt4 key购买 nike

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

我想准确地从哪个文件、哪个函数、哪个行中确定导致内存泄漏。我正在尝试使用 Address Sanitizer ,特别是 Leak Sanitizer .

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

-Wall -Wextra -flto -O3 -march=native -ffast-math -fsanitize=address

它编译成功。但是,当我尝试使用运行时标志时 ASAN_OPTIONS=detect_leaks=1为了启用 Leak Sanitizer,我看到以下错误:
==26454==AddressSanitizer: detect_leaks is not supported on this platform.
Abort trap: 6

我究竟做错了什么?我怎么能解决这个问题?

或者,Valgrind 有其他好的替代品吗? Valgrind 对我不起作用,因为 1)我使用的是 MacOS Catalina,2)我的程序以无限循环运行。如果我是对的,Valgrind 会在退出程序后显示消息,所以它不会工作。

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

最佳答案

What am I doing wrong?



没有。问题是您的 Clang 版本不支持泄漏检测。但是,它看起来像最新版本。见 this answerthis recipe .

Valgrind displays messages after exiting the program, so it won't work.



您说得有些正确:默认情况下,Valgrind 只会在程序退出时执行泄漏分析。

有两种方法可以解决这个问题:
  • 使您的程序在执行中某个明确定义的位置退出,例如进行N次计算,或绘制K帧等后
  • 让你的程序执行 VALGRIND_DO_LEAK_CHECK client request .
  • 如果您只想在某些条件成立时执行泄漏检查,并且很难从程序内部检测这些条件是否为真,则可以使用 GDB 和 monitor command要求 Valgrind 在需要时执行泄漏检查。
  • 关于gcc - 当 Address Sanitizer 说该平台不支持 detect_leaks 时,我应该解决什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62315404/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com