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

M2 Mac下lipo转换arm64至x86架构及Dr. Memory使用问题

解决M2 Mac上Dr. Memory检测内存泄漏的问题

1. 先纠正核心误解

你用的valgrind2drmemory.pl不是用来运行内存检测的工具——它只是用来把Valgrind的抑制规则文件转换成Dr. Memory兼容格式的脚本,直接用它跑程序自然不会产生检测结果,输出文件为空是正常现象。

2. 针对M2 Mac的正确操作流程

步骤1:编译x86_64架构的程序

M2是arm64架构,Dr. Memory目前仅支持x86_64程序,编译时要指定架构并保留调试信息:

c++ -arch x86_64 -g -fno-inline -fno-omit-frame-pointer linkedlist.cpp -o myapp
  • -arch x86_64:生成x86_64可执行文件,系统会通过Rosetta 2自动适配运行
  • -g:保留调试符号,让Dr. Memory能定位到具体代码行
  • -fno-inline/-fno-omit-frame-pointer:禁止函数内联、保留栈帧指针,避免检测结果丢失关键信息

步骤2:用Dr. Memory核心工具执行检测

直接调用drmemory命令运行程序,不要用之前的转换脚本:

/Users/name/Documents/DrMemory-MacOS-2.5.0/bin/drmemory -- ./myapp
  • 如果你的程序需要传参数,直接加在./myapp后面即可
  • 检测结果默认输出到终端,也可以用--log file=result.txt指定输出到文件

3. 关于-m32编译报错的说明

M2 Mac的Xcode命令行工具确实不支持32位x86编译(-m32参数),而且Dr. Memory对Mac平台32位程序的支持本身就很有限,直接放弃32位编译,专注x86_64即可。

额外注意事项

  • 确保已安装Rosetta 2:如果没装,运行softwareupdate --install-rosetta完成安装,否则x86_64程序无法启动
  • 避免编译优化:不要加-O2这类优化参数,会破坏调试符号,导致检测结果无法定位代码
  • 尽量用最新版Dr. Memory:旧版本对Apple Silicon的兼容性更差,优先下载官方最新包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:07:05