You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS Monterey 12.0.1下Clion如何用leaks定位C++内存泄漏具体代码行

Mac M1 使用leaks工具获取内存泄漏对应代码行号的解决方案

前置编译配置

要让leaks识别代码行号,首先需要编译器生成调试符号:

  • 在CLion项目的CMakeLists.txt中添加以下编译参数,关闭优化并开启调试符号生成:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
# 如果你用Release模式编译也需要查泄漏的话可以加下行,一般Debug模式即可
# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
  • 修改完成后重新加载CMake配置,全量重新编译项目。

运行时开启内存分配栈日志

macOS默认不会记录每一次内存分配的调用栈,需要手动开启环境变量MallocStackLogging:

终端运行方式

直接在运行命令前添加环境变量即可:

MallocStackLogging=1 leaks -atExit -- ./你的二进制文件名

-atExit参数会在程序运行结束后自动输出完整的leaks报告,不需要手动查找进程ID。

CLion运行方式

  • 点击CLion右上角运行配置的下拉框,选择「编辑配置」
  • 在弹出窗口的「环境变量」栏,添加键值对MallocStackLogging=1
  • 保存配置后运行程序,运行结束后在控制台就能看到完整的带调用栈的泄漏报告

安全限制警告处理

如果还是出现Process is not debuggable的提示,不需要完全关闭SIP,只需要放开调试权限即可:

  1. 重启Mac,长按电源键直到进入恢复模式
  2. 打开顶部菜单栏的「终端」,执行命令:
csrutil enable --without debug
  1. 重启设备后再次执行上述操作即可正常获取带行号的泄漏报告。

内容的提问来源于stack exchange,提问作者Grobenek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:54:02