Android 使用Eclipse和Mat查找内存泄漏,无法转换hprof文件

Android 使用Eclipse和Mat查找内存泄漏,无法转换hprof文件,android,eclipse,memory-leaks,terminal,hprof,Android,Eclipse,Memory Leaks,Terminal,Hprof,这似乎是一个被问了很多次的问题。我正在使用Eclipse在OSX中编写一个Android应用程序。到目前为止,没有问题,只是应用程序有时会崩溃,我想看看发生了什么,这样我就可以解决问题。(这可能与位图或变量没有正确循环有关。但我不知道从哪里开始研究它。) 我使用DDMS工具(在eclipse中)创建了一个转储文件。然后我下载了MemoryanAnalyzer应用程序来打开它。这里是我被困了一个小时的地方:我必须首先转换文件,因为Eclipse以不同的格式编写hprof文件。我如何转换它 这个问题

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

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

这个问题的答案,直接针对我的问题。顶部答案与hprof conv工具的参考相同

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

例如:

hprof conv android.hprof mat.hprof

然后打开mat.hprof in Memory Analyzer

我有几个问题

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

    用途:hprof conf infile输出文件

  • 我在终端,所以我打开“newcommand…”或尝试使用同样打开的shell。然后,当我运行“hprof conv dump1.hprof dump1a.hprof”时,我得到错误“command not found”。所以我觉得我偏离了轨道。我还尝试了“hprof conf”,而不是第1点中建议的“hprof conv”。同样的错误。还尝试了文件的各种路径,没有更改

  • 如果我在正确的轨道上,如何正确地将此命令指向文件位置?我把它放在我的桌面上,它的名字叫dump1.hprof。我对终端不是很有经验


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

    您好,很抱歉回复太晚。我刚刚完全解决了这个问题,并在这里写了一些说明:

    方法1:使用独立垫

    • 进入c:…\sdk tools\tools并复制hprof-conv.exe
    • 转到保存dump1.hprof文件的任何文件夹并粘贴.exe文件
    • 打开终端并将目录更改为包含转储文件和.exe文件的文件夹(例如,如果文件夹为c:\Users\YourName\DumpFolder,则键入
      cd c:\Users\YourName\DumpFolder
    • 当您在文件夹中时,在命令提示符下键入以下命令并按enter键:
      hprof conf infle.hprof outfile.hprof
    注意:如果您得到一个关于“未找到目录”的错误,说明您在命令提示符下的目录不正确

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

    方法2:在Eclipse中使用MAT

    • 在Eclipse中安装MAT插件
    • 如前所述选择以获取堆转储
    • 转到窗口->打开透视->其他->内存分析
    • 在标签页中查找左上角有蓝色磁盘图标的窗口,然后展开标签页(上面会有一些疯狂的名字,上面有很长的数字串)
    • 完成…您正在Eclipse中查看堆转储

    您好,很抱歉回复太晚。我刚刚完全解决了这个问题,并在这里写了一些说明:

    方法1:使用独立垫

    • 进入c:…\sdk tools\tools并复制hprof-conv.exe
    • 转到保存dump1.hprof文件的任何文件夹并粘贴.exe文件
    • 打开终端并将目录更改为包含转储文件和.exe文件的文件夹(例如,如果文件夹为c:\Users\YourName\DumpFolder,则键入
      cd c:\Users\YourName\DumpFolder
    • 当您在文件夹中时,在命令提示符下键入以下命令并按enter键:
      hprof conf infle.hprof outfile.hprof
    注意:如果您得到一个关于“未找到目录”的错误,说明您在命令提示符下的目录不正确

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

    方法2:在Eclipse中使用MAT

    • 在Eclipse中安装MAT插件
    • 如前所述选择以获取堆转储
    • 转到窗口->打开透视->其他->内存分析
    • 在标签页中查找左上角有蓝色磁盘图标的窗口,然后展开标签页(上面会有一些疯狂的名字,上面有很长的数字串)
    • 完成…您正在Eclipse中查看堆转储

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

    ./hprof-conv infile.hprof outfile.hprof
    

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

    ./hprof-conv infile.hprof outfile.hprof
    

    听起来您只需要指定命令的完整路径-
    /full path/hprof conv dump1.hprof dump1a.hprof
    听起来您只需要指定命令的完整路径-
    /full path/hprof conv dump1.hprof dump1a.hprof
    谢谢!!!!方法2是完美的。我不知道我该怎么想出来。如果你愿意,可以叫我noob,但我现在正在启动并运行,终于找到了如何使用该工具的方法。你能帮我解决ubuntu 14.04的问题吗?对不起,但对ubuntu没有任何线索…甚至从未打开过OSThank you!!!!方法2是完美的。我不知道我该怎么想出来。如果你愿意,可以叫我noob,但我现在已经开始运行了,终于知道如何使用这个工具了。你能帮我解决ubuntu 14.04的问题吗?对不起,关于ubuntu一点线索都没有……甚至从来没有打开过操作系统