内存转储android中的应用程序

内存转储android中的应用程序,android,memory,adb,root,ddms,Android,Memory,Adb,Root,Ddms,我在一个根设备上,想完全转储某个应用程序的内存 我试过: 一些谷歌搜索结果显示使用“adb kill-10[pid]” 但是,它给了我“sigusr1强制gc(no-hprof)”,并且没有hproc被转储。 这可能是特定于设备的 我还尝试在DDMS(Eclipse)中使用“Dump PROF file”按钮, 但它只给我一个大约5 MB的文件,这不是一个 完全内存转储,不是很有用 我已经尝试chmod/proc/[pid]/mem并访问该文件,但是 即使是在一个根设备上,它也拒绝给我许可 HP

我在一个根设备上,想完全转储某个应用程序的内存

我试过:

  • 一些谷歌搜索结果显示使用“adb kill-10[pid]” 但是,它给了我“sigusr1强制gc(no-hprof)”,并且没有hproc被转储。 这可能是特定于设备的
  • 我还尝试在DDMS(Eclipse)中使用“Dump PROF file”按钮, 但它只给我一个大约5 MB的文件,这不是一个 完全内存转储,不是很有用
  • 我已经尝试chmod/proc/[pid]/mem并访问该文件,但是 即使是在一个根设备上,它也拒绝给我许可

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


    编辑:要读取除具有调试权限的/proc/self/mem之外的任何内容,请参阅以获取一些见解。

    您使用哪些代码读取/proc/[pid]/mem?你试过源代码了吗?我正在根Android上运行来自Java的代码。我尝试了几乎所有的IO方法,问题是我无法创建任何类型的文件处理程序。我的最后一个方法是使用RandomAccessFile。我写了一个程序来实现这一点,看看我的答案,谢谢!我的阅读器进程有根。您知道如何在尝试读取时停止目标进程以防止ESRCH错误吗?