我希望能够从命令行触发Android堆转储.那是否有命令?
具体来说,从命令行,而不是通过Montior或DDMS GUI
也许就像使用ddms或adb,例如ddms -head-dump或adb shell heapdump?AFAICT监视器和ddms始终以GUI模式启动,而adb没有堆转储命令.
更新:我试过这个,看起来很有希望,但它不起作用:
adb jdwpadb 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
Run Code Online (Sandbox Code Playgroud)
Dam*_*ash 17
在Android pre 3.0中你可以使用所谓的
kill -10 <pid>(更多)
在Android 3.0中添加了一个新的命令行工具:
adb shell am dumpheap <pid> <output-file-name>;(更多)
要获得HPROF,您还需要使用hprof-conv更改它的格式
最简单的方法:
adb shell am dumpheap your.package.name /sdcard/dumpheap.hprof
Run Code Online (Sandbox Code Playgroud)
困难的方法(不记得为什么我最初添加它):
adb shell am dumpheap $(ps | grep your.package.name | awk '{print $2}') /sdcard/dumpheap.hprof
Run Code Online (Sandbox Code Playgroud)
如果您的设备没有awk尝试使用busybox awk.
之后拉取创建的文件,使用hprof-conv进行转换并在 Android Studio 中打开它。
| 归档时间: |
|
| 查看次数: |
10610 次 |
| 最近记录: |