在安卓中进行应用程序内存转储

5

我使用的是已经root过的设备,想要获取某个应用的完整内存转储。

我已经尝试了以下方法:

  1. 一些谷歌搜索结果显示可以使用 "adb kill -10 [pid]" 命令。 但是,它给出的是 "sigusr1 forcing gc (no hprof)",没有生成hproc文件。 这可能是设备特定的问题。
  2. 我还尝试使用DDMS(Eclipse)中的 "Dump PROF file" 按钮, 但是它只给出了一个大约5MB的文件,这不是完整的内存转储,也不是很有用。
  3. 我尝试了chmod /proc/[pid]/mem,并访问该文件,但即使在root过的设备上,也会提示权限被拒绝。

你用的是哪个代码来读取/proc/[pid]/mem?你尝试过从这个问题中获取的代码吗? - user1643723
我正在使用 Java 在已 root 的 Android 上运行代码。我几乎尝试过所有的 IO 方法,但问题在于我无法创建任何类型的文件处理程序。我的最后一种方法是使用 RandomAccessFile。 - user1318504
我写了一个程序来做这件事,请看看我的答案这里 - Tal Aloni
1个回答

0

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

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


谢谢! 我的读取进程具有根权限。 您知道我如何停止目标进程以防止在尝试读取时出现ESRCH错误吗? - user1318504

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接