我希望能够从命令行触发Android堆转储。是否有相应的命令?
具体来说,从命令行,而不是通过Montior或DDMS GUI
也许像使用ddms或adb,例如ddms -head-dump
或adb shell heapdump
?AFAICT监视器和ddms总是在GUI模式下启动,而adb没有堆转储命令。
更新:我尝试了这个,它看起来很有希望,但它不工作:
adb jdwp
adb forward tcp:8000 jdwp:1234
(将1234的输出替换为1)jmap -dump:format=b,file=heapdump.hprof localhost:8000
但即使堆摘要也失败了:
jmap -heap localhost:8000
Attaching to remote server localhost:8000, please wait...
Error attaching to remote server: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketTimeoutException: Read timed out
3条答案
按热度按时间dwbf0jvd1#
在Android pre 3.0中,您可以使用所谓的
kill -10 <pid>
(more)在Android 3.0中,添加了一个新的命令行工具:
adb shell am dumpheap <pid> <output-file-name>;
(more)Detailed description
要获取HPROF,还需要使用hprof-conv更改其格式
6l7fqoea2#
简单的方法:
困难的方式(不记得我最初为什么添加它):
如果您的设备没有
awk
,请尝试使用busybox awk
。之后,拉取创建的文件,使用hprof-conv转换它并在Android Studio中打开它。
p5fdfcr13#
对于那些不想每次都寻找正确的PID,只想使用单行命令的人
将此添加到您的.zshrc或.bashrc:
要从命令行使用它,请使用USB连接Android并运行:
堆转储保存在
/Users/$USER/Desktop
下