ошибка при открытии файла HPROF: IOException: Unknown HPROF Version

121

Я получаю следующее исключение при попытке открыть файл HPROF (созданный Debug.dumpHprofData) с помощью анализатора памяти:

java.io.IOException: Unknown HPROF Version (JAVA PROFILE 1.0.3)
at org.eclipse.mat.hprof.AbstractParser.readVersion(AbstractParser.java:124)
at org.eclipse.mat.hprof.Pass1Parser.read(Pass1Parser.java:69)
at org.eclipse.mat.hprof.HprofIndexBuilder.fill(HprofIndexBuilder.java:65)
at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.parse(SnapshotFactoryImpl.java:203)
at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.openSnapshot(SnapshotFactoryImpl.java:114)
at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:143)
at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:123)
at org.eclipse.mat.ui.snapshot.ParseHeapDumpJob.run(ParseHeapDumpJob.java:56)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

Как мне решить эту проблему?

Asahi
источник
в системе Windows вы можете найти этот пост полезным stackoverflow.com/questions/14168485/…
sivi

Ответы:

298

hprofФайл , который вы получаете от Android имеет андроид формат , специфичный. Вам необходимо преобразовать hprofфайл, взятый из ОС Android, в стандартный hprofформат. Для этого вы можете использовать hprof-convинструмент, расположенный по адресу AndroidSDK/tools/hprof-conv.

Например:

hprof-conv android.hprof mat.hprof

Затем откройте файл mat.hprof в Анализаторе памяти.

РЕДАКТИРОВАТЬ: hprof-conv может находиться AndroidSDK/platform-tools/в некоторых пакетах.

inazaruk
источник
6
@inazaruk hprof-conv запускался автоматически при нажатии кнопки дампа, я не уверен, какая версия ADT перестала работать, но, скорее всего, это ошибка
smith324
1
@ smith234, может и правда для кнопки в DDMS. Но когда Debug.dumpHprofData() он используется, преобразование должно выполняться вручную.
inazaruk
Тем не менее я получал ошибку «доступ запрещен» в каталоге инструментов. Мне пришлось изменить права доступа в этом каталоге, чтобы он работал.
IgorGanapolsky
Опечатка: последняя версия MAT требует, чтобы расширение имени файла было hprof, а не hpof, как в примере выше.
greg7gkb
10
просто предупреждаю, мой hprof-conv был в sdk \ platform-tools вместо этого на случай, если кто-то пропустил его в sdk / tools
cjayem13
41

Если вы используете Eclipse, просто измените следующее:

  1. Открыть настройки (из меню Окно)
  2. Перейдите в Android-> DDMS.
  3. Измените действие HPROF на «Открыть в Eclipse»
Апирак Лунла
источник
В 64-битной Windows 7 я не мог конвертировать с помощью hprof-convинструмента, он просто ничего не делал. Итак, попробовал свой метод, и он работает! Мне просто нужно было установить MAT для eclipse, и теперь он отлично работает. спасибо
Паулюс Виндзигельскис
3
Было бы неплохо обновить, чтобы объяснить, что пользователь должен сначала открыть настройки Eclipse, а затем выбрать Android в левом меню и т. Д.
Мик,
1
в Luna мне нужно было установить MAT вручную: Help-> Install New Software: download.eclipse.org/mat/1.4/update-site
joecks 06
В моем Eclipse Mars.2 (4.5.2) (Win 10) «Открыть в Eclipse» уже установлено и установлен MAT, но я все равно получаю ошибку «неизвестная версия HPROF». Мне пришлось преобразовать файл с помощью "hprof-conv".
Неф
7

hprof-conv изменено расположение инструмента.

Сейчас он находится по адресу AndroidSDK/platform-tools/hprof-conv

Sumoanand
источник