使用Eclipse和Mat狩猎内存泄漏,无法转换hprof文件

时间:2013-10-15 01:47:44

标签: android eclipse memory-leaks terminal hprof

这似乎是一个多次提出的问题。我正在使用Eclipse在OS X中编写一个Android应用程序。到目前为止,没问题,除了应用程序有时会崩溃,我想看看有什么事情发生,所以我可以解决问题。 (它可能与位图或变量没有正确回收有关。但我不知道还有什么地方可以开始研究它。)

我使用DDMS工具(在eclipse中)创建转储文件。然后我下载了MemoryAnalyzer应用程序来打开它。这是我被困一小时的地方:我必须首先转换文件,因为Eclipse以不同的格式写入hprof文件。我如何转换它?

这个问题的答案error openning HPROF file直接解决了我的问题。最佳答案与hprof-conv工具的参考相同。

  

您从Android获得的hprof文件具有特定于Android的格式。您应该将Android操作系统中的hprof>文件转换为标准的hprof格式。为此,您可以使用位于AndrodiSDK / tools / hprof-conv的hprof-conv工具>

     

例如:

     
    

hprof-conv android.hprof mat.hprof

  
     

然后在Memory Analyzer中打开mat.hprof。

我有几个问题。

  1. 当我打开hprof-conv工具时,它显示了一些关于它的行然后说“[Process completed]”。而且没有地方可以输入任何文字。屏幕上唯一相关的信息是:

      

    用法:hprof-conf infile outfile

  2. 我在终端,所以我打开“新命令......”或尝试使用也打开的shell。然后,当我运行“hprof-conv dump1.hprof dump1a.hprof”时,我收到错误“未找到命令”。所以我觉得我偏离轨道。我也尝试了“hprof-conf”,而不是“hprof-conv”,它在第1点中的建议方式。同样的错误。还尝试了文件的各种路径,没有变化。

  3. 如果我在正确的轨道上,我该如何正确地将此命令指向文件位置?我把它放在桌面上,名为dump1.hprof。我对终端不太熟悉。

  4. 提前感谢您的回答,或者是关于如何寻找内存泄漏的另一个建议。

2 个答案:

答案 0 :(得分:4)

如果您在Mac上,请在命令前添加./:

./hprof-conv infile.hprof outfile.hprof

答案 1 :(得分:2)

您好,抱歉迟到了。我刚刚完成了这个问题并在此处写了一些说明:http://spragucm.wordpress.com/2013/11/21/debugging-android-project-ddms-heap-dump-in-eclipse/

方法1:使用独立MAT

  • 进入c:... \ sdk-tools \ tools并复制hprof-conv.exe
  • 转到您保存dump1.hprof文件的任何文件夹并粘贴.exe文件
  • 打开终端并将目录更改为包含dump和.exe文件的文件夹(例如,如果文件夹是c:\ Users \ YourName \ DumpFolder,则键入cd c:\Users\YourName\DumpFolder
  • 当您在文件夹中时,在命令提示符下键入以下内容并按Enter键:hprof-conf infile.hprof outfile.hprof

注意:如果您收到有关未找到目录的错误,则表示您未在命令提示符中的正确目录中

  • outfile.hprof文件应与其他文件位于同一文件夹中。

方法2:在Eclipse中使用MAT

  • 在Eclipse中安装MAT插件
  • 选择像以前一样获取堆转储
  • 转到Window-> Open Perspective-> other-> Memory Analysis
  • 在标签中查看左上方有一个蓝色磁盘图标的窗口并展开标签(这将有一些疯狂的名字,上面有一长串数字)
  • 完成......您正在查看Eclipse中的堆转储