提问者:小点点

使用Eclipse和Mat查找内存泄漏,转换hprof文件时卡住


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

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

这个问题的答案,错误打开HPROF文件,直接解决了我的问题。顶部答案与hprof-conv工具的参考相同。

您从Android获得的hprof文件具有android特定格式。您应该转换hprof

例如:

hprof-conv android. hprof mat.hprof

然后在内存分析器中打开mat. hprof。

我对此有几个问题。

>

  • 当我打开hprof-conv工具时,它显示了一些关于它的行,然后说“[进程完成]”。并且没有地方输入任何文本。屏幕上唯一相关的信息是:

    用法:hprof-conf文件输出文件

    我在终端中,所以我打开了“新命令…”或尝试使用也打开的shell。然后当我运行“hprof-conv dump p1. hprof dump p1a.hprof”时,我收到错误“找不到命令”。所以我认为我偏离了轨道。我还尝试了“hprof-conf”,而不是“hprof-conv”,就像第1点中建议的那样。同样的错误。还尝试了文件的各种路径,没有改变。

    如果我走在正确的轨道上,如何正确地将此命令指向文件位置?我的桌面上有它,它的名称为dump p1. hprof。我对终端不是很有经验。

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


  • 共2个答案

    匿名用户

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

    ./hprof-conv infile.hprof outfile.hprof
    

    匿名用户

    您好,抱歉回复晚了。我刚刚经历了这个问题,并在这里写了一些说明:http://spragucm.wordpress.com/2013/11/21/debugging-android-project-ddms-heap-dump-in-eclipse/

    方法一:使用独立MAT

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

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

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

    方法2:在Eclipse中使用MAT

    • 在Eclipse中安装MAT的插件
    • 选择像以前一样获取堆转储
    • 转到窗口-