如何在Mac OS系统下创建应用程序及进程的内存转储文件?
嘿,在Mac OS上获取应用或进程的内存转储其实有几种顺手的方法,我给你拆解清楚:
方法一:用Activity Monitor(图形界面,小白友好)
这是最直观的方式,不用敲命令:
- 打开Launchpad,找到「其他」文件夹里的Activity Monitor,或者直接用Spotlight(按Cmd+空格)搜名字打开
- 在进程列表里找到你要转储的目标(右上角搜索框直接搜进程名更快)
- 选中进程后,点顶部菜单栏的「查看」→「导出进程内存」
- 选好保存路径和文件名,等着就行。导出的文件后缀一般是
.mem,包含了进程的完整内存镜像
方法二:用LLDB命令行工具(开发者首选)
LLDB是Mac自带的调试器,灵活性更高:
- 先拿到目标进程的PID:可以用
ps aux | grep 你的进程名在终端查,或者直接在Activity Monitor的「PID」列看 - 打开终端,输入
lldb -p <你的PID>,把调试器挂载到目标进程上 - 进入LLDB交互界面后,输入
process save-core ~/Desktop/你的转储文件名.core(路径可以自己改) - 等转储完成,输入
quit退出LLDB就行
方法三:用vmmap工具(灵活导出指定内存)
vmmap可以精准选择要导出的内存区域,也能导出完整内存:
- 导出完整进程内存:在终端敲
vmmap -w ~/Desktop/内存转储文件 <PID>,-w参数表示导出可写的内存区域(基本就是进程的全部活跃内存) - 导出特定内存区域:先运行
vmmap <PID>查看所有内存块的起始/结束地址,然后用vmmap -memory 起始地址-结束地址 <PID> > ~/Desktop/指定区域转储.txt把目标区域导出
一些小提醒
- 如果遇到权限不足的问题,在命令前加
sudo就行 - 内存转储文件可能特别大(比如几GB),提前确认保存路径有足够空间
- 用LLDB挂载进程时,目标应用会暂时冻结,转储完成退出LLDB后就会恢复正常
内容的提问来源于stack exchange,提问作者wachschaf




