无法从Android模拟器捕获.NET MAUI应用的dotnet-gcdump内存转储
.NET MAUI Android应用内存转储收集问题解决指南
问题说明
我按照官方文档排查Android平台.NET MAUI应用内存问题时遇到两个问题:
- 执行
dotnet-gcdump ps命令,无法在列表中找到Android模拟器的进程ID; - 手动获取进程ID后执行
dotnet-gcdump collect -p 33972,出现写入失败错误(提示:Failed to write gcdump to file: Access to the path '...' is denied)。
解决步骤
一、让dotnet-gcdump识别Android进程
- 确认MAUI应用正在模拟器中运行,且Android调试桥(adb)已连接到模拟器;
- 打开终端/命令提示符,执行
adb shell进入模拟器的shell环境; - 在shell内执行
ps -A | grep dotnet,找到对应MAUI应用的dotnet进程ID; - 退出shell(输入
exit),执行端口转发命令:adb forward tcp:9000 tcp:9000(端口可选用未被占用的其他值); - 重新执行
dotnet-gcdump ps,此时应该能看到映射后的模拟器进程。
二、解决写入失败问题
- 切换到有写入权限的目录(比如用户主目录:
cd ~或cd %USERPROFILE%)再执行收集命令; - 显式指定输出文件路径,避免权限问题:
dotnet-gcdump collect -p 33972 -o ./maui-memory-dump.gcdump; - 检查
dotnet-gcdump版本与应用使用的.NET版本是否匹配,执行dotnet-gcdump --version查看,版本不匹配则更新:dotnet tool update -g dotnet-gcdump; - 若仍有权限问题,尝试以管理员/root权限运行终端,再执行命令。
三、替代方案:使用Android Studio Profiler
如果dotnet-gcdump始终无法正常工作,可直接使用Android Studio的内存分析工具:
- 打开Android Studio,连接到运行MAUI应用的模拟器;
- 打开Profiler面板,选择内存模块,可实时监控内存使用,也能手动触发GC、捕获内存转储并分析。
内容的提问来源于stack exchange,提问作者Deepika
相关产品推荐
相关产品推荐

