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
相关产品推荐
相关产品推荐

