2011-04-12 66 views
5

正如许多有用的网站所详述的,分析Android应用程序内存使用情况的一种方法是执行“kill -10 [PID]”来触发HPROF转储。这似乎在某些设备上工作,并且logcat的通常包含这样的事情:为什么我无法从某些设备获得HPROF转储?

I/dalvikvm(32170): threadid=3: reacting to signal 10 
I/dalvikvm(32170): SIGUSR1 forcing GC and HPROF dump 
I/dalvikvm(32170): hprof: dumping VM heap to "/data/misc/heap-dump-tm1302633572-pid32170.hprof-hptemp". 
I/dalvikvm(32170): hprof: dumping heap strings to "/data/misc/heap-dump-tm1302633572- pid32170.hprof". 
I/dalvikvm(32170): hprof: heap dump completed, temp file removed 

然而,在其他设备上,执行“杀-10”的结果是:

I/dalvikvm(5687): threadid=4: reacting to signal 10 
I/dalvikvm(5687): SIGUSR1 forcing GC (no HPROF) 

所有设备我试着这是根植,我已经确保chmod/data/misc到777.执行“kill -10”后我没有收到任何错误消息。

在情况下,它是有帮助的,这里是哪里我得到一个HPROF转储设备: HTC ACE(Desire HD的),HTC G1,HTC的Nexus One(T-Mobile)的

,这里是该设备在那里我没有得到一个HPROF转储: 的Nexus S,Droid手机的Droid X,Nexus One的(AT & T)

为什么我不能得到某些设备的HPROF转储和有什么我可以做的,让我获得转储?

回答

8

使用DDMS。点击“转储HPROF文件”工具栏图标 - 它看起来像一个半满的罐子,并带有一个向下的箭头。当我在Nexus S上试用时,像一个魅力工作。

+0

非常好,谢谢。看起来这样也可以避免我必须用hprof-conv转换它。 – 2011-04-13 18:05:34

+0

这里是禁用功能的区别: http://android.git.kernel.org/?p=platform/dalvik.git;a=commitdiff;h=b037a464512c0721bdca969ae19cce3d4b17b083 – 2011-08-22 14:37:47

+1

为了让将来的读者清楚,功能@Jan Berkel指的是SIGUSR1强制OP使用的HPROF转储。 DDMS HPROF方法仍然适用于AFAIK。 – CommonsWare 2011-08-22 14:47:46

相关问题