内存转储Android中的应用程序

use*_*504 5 memory android root adb ddms

我在有根设备上,想对某个应用程序进行完整的内存转储。

我试过了:

  1. 一些谷歌结果说使用“adb kill -10 [pid]”但是,它给了我“sigusr1 forcing gc(no hprof)”,并且没有转储hproc。这可能是特定于设备的。
  2. 我也试过在 DDMS (Eclipse) 中使用“Dump PROF file”按钮,但它只给了我一个大约 5 MB 的文件,这不是一个完整的内存转储,也不是很有用。
  3. 我试图 chmod /proc/[pid]/mem,并访问该文件,但即使在有根设备上,它也拒绝了我的权限。

use*_*723 0

HPROF 仅仅是堆的转储,因此它显然不是全部内存。如此处所述,Android 在较新版本中不再在 SIGUSR1(信号 10)上转储堆。这里给出了一些关于使用 /proc/[pid]/mem 的有用事实。简而言之:您的“权限被拒绝”也可能是由于尝试以错误的方式读取文件造成的。

编辑:要读取任何内容,除了具有调试权限的 /proc/self/mem 之外,可能会特别有用,请参阅此问题以获取一些见解。