这似乎是一个被问过很多次的问题。我正在使用 Eclipse 在 OS X 中编写一个 Android 应用程序。到目前为止,没有问题,除了应用程序有时会崩溃,我想看看发生了什么,以便我可以解决问题。(它可能与位图或变量没有正确回收有关。但我不知道从哪里开始研究它。)
我使用 DDMS 工具(在 eclipse 中)创建了一个转储文件。然后我下载了 MemoryAnalyzer 应用程序来打开它。这是我被困了一个小时的地方:我必须先转换文件,因为 Eclipse 以不同的格式写入 hprof 文件。我该如何转换它?
这个问题的答案,打开 HPROF 文件时出错,直接解决了我的问题。最佳答案与 hprof-conv 工具的参考相同。
您从 Android 获得的 hprof 文件具有 android 特定格式。您应该将 Android OS 中的 hprof >file take 转换为标准的 hprof 格式。为此,您可以使用位于 AndrodiSDK/tools/hprof-conv 的 hprof-conv 工具。
例如:
hprof-conv android.hprof mat.hprof
然后在 Memory Analyzer 中打开 mat.hprof。
我有几个问题。
当我打开 hprof-conv 工具时,它会显示一些关于它的行,然后显示“[进程完成]”。而且没有地方可以输入任何文字。屏幕上唯一相关的信息是:
用法:hprof-conf infile outfile
我在终端中,所以我打开“新命令...”或尝试使用也打开的外壳。然后当我运行“hprof-conv dump1.hprof dump1a.hprof”时,我收到错误“找不到命令”。所以我觉得我跑题了。我还尝试了“hprof-conf”,而不是“hprof-conv”,它在第 1 点中建议的方式。同样的错误。还尝试了文件的各种路径,没有变化。
如果我在正确的轨道上,我如何正确地将这个命令指向文件位置?我在我的桌面上有它,它的名字是dump1.hprof。我对终端不是很有经验。
提前感谢您的回答,或者关于如何寻找内存泄漏的其他建议。