如何使用 CLion 在 MacOS Big Sur 上查看内存泄漏?

Posted

技术标签:

【中文标题】如何使用 CLion 在 MacOS Big Sur 上查看内存泄漏?【英文标题】:How can I see memory leaks on MacOS Big Sur using CLion? 【发布时间】:2021-06-10 10:51:52 【问题描述】:

我不知道如何在使用 CLion 的 MacOS Big Sur 上使用 CLion 来查看内存泄漏,我已经尝试过这些方法:

    Valgrind - 与 Big Sur 不兼容

    来自 Clang 的 Leak Sanitizer - 根据 CLion 的支持人员的说法,这显然与 MacOS 不兼容

    在 CLion 内部,我在 CMakeLists.txt 中编写了这个命令:

       set(CMAKE_C_FLAGS "$CMAKE_C_FLAGS -fsanitize=address -g")
    

    然后我在首选项菜单中写了 -> 地址消毒剂部分的消毒剂:

       detect_stack_use_after_return=1
    

    根据 CLion 支持页面,他们说 Leak Sanitizer 包含在 Address sanitizer 中。

【问题讨论】:

【参考方案1】:

通常您可以在编译期间使用libasan (https://www.osc.edu/resources/getting_started/howto/howto_use_address_sanitizer),但是在 MacOS 上还有一些额外的步骤:

https://clang.llvm.org/docs/AddressSanitizer.html(在此页面搜索“MacOS”以获得概览):

内存泄漏检测

有关 AddressSanitizer 中检漏仪的更多信息,请参阅 泄漏消毒剂。 Linux 上默认开启泄漏检测, 并且可以在 macOS 上使用 ASAN_OPTIONS=detect_leaks=1 启用; 但是,其他平台尚不支持它。

来源:https://clang.llvm.org/docs/AddressSanitizer.html

另见Mac OS: Leaks Sanitizer和https://developer.apple.com/documentation/xcode/diagnosing_memory_thread_and_crash_issues_early

【讨论】:

【参考方案2】:

假设您已经安装了 xcode 命令行开发工具,在 CLion 中打开一个终端窗口并尝试以下命令,其中 programname 是您正在构建的程序的名称:

leaks -atExit -- cmake-build-debug/programname

你会得到类似这样的输出:

leaks Report Version: 4.0
Process 69522: 214 nodes malloced for 21 KB
Process 69522: 1 leak for 1008 total leaked bytes.

    1 (1008 bytes) ROOT LEAK: 0x14c6067f0 [1008]

【讨论】:

【参考方案3】:

在偏好 |构建、执行、部署 | CMake -> Cmake 选项 使用

-DCMAKE_BUILD_TYPE=ASAN -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++

【讨论】:

以上是关于如何使用 CLion 在 MacOS Big Sur 上查看内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

在 CLion 中设置 OpenMP 项目 MacOS Mojave

在MacOS系统上编译OpenJDK12并使用CLion调试

macos苹果系统Clion意外退出和macos苹果系统JetBrains系列软件意外退出问题解决

macos苹果系统Clion意外退出和macos苹果系统JetBrains系列软件意外退出问题解决

手贱升 macOS Big Sur 后,该如何降级?

mac小技巧 macOS Big Sur 中使用Safari 起始页