error al abrir el archivo HPROF: IOException: Versión HPROF desconocida

121

Recibo la siguiente excepción al intentar abrir el archivo HPROF (creado por Debug.dumpHprofData) con Memory Analyzer:

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)

¿Cómo resuelvo esto?

Asahi
fuente
bajo el sistema de Windows puede encontrar útil esta publicación stackoverflow.com/questions/14168485/…
sivi

Respuestas:

298

El hprofarchivo que obtienes de Android tiene un formato específico de Android. Debe convertir hprofla toma de archivos del sistema operativo Android a hprofformato estándar . Para esto, puede usar la hprof-convherramienta que se encuentra en AndroidSDK/tools/hprof-conv.

Por ejemplo:

hprof-conv android.hprof mat.hprof

Y luego abra mat.hprof en Memory Analyzer.

EDITAR: hprof-conv podría estar ubicado AndroidSDK/platform-tools/en algunos paquetes.

inazaruk
fuente
66
@inazaruk hprof-conv solía ejecutarse automáticamente al hacer clic en el botón de volcado, no estoy seguro de qué versión de ADT dejó de funcionar, pero es probable que sea un error
smith324
1
@ smith234, podría ser cierto para el botón en DDMS. Pero cuando Debug.dumpHprofData() se usa, la conversión debe hacerse manualmente.
inazaruk
Sin embargo, recibí un error de "permiso denegado" en el directorio de herramientas. Tuve que chmod permisos en ese directorio para que funcione.
IgorGanapolsky
Error tipográfico: la última versión de MAT requiere que la extensión del nombre de archivo sea hprof, no hpof como en el ejemplo anterior.
greg7gkb
10
solo un aviso, mi hprof-conv estaba bajo sdk \ platform-tools en caso de que alguien se lo perdiera bajo sdk / tools
cjayem13
41

Si está utilizando Eclipse, simplemente cambie lo siguiente:

  1. Abrir Preferencias (desde el menú Ventana)
  2. Navegue a Android-> DDMS
  3. Cambie la acción HPROF a "Abrir en Eclipse"
Apirak Lunla
fuente
En Windows 7 de 64 bits, no pude convertir usando la hprof-convherramienta, simplemente no hizo nada. ¡Así que probé tu método y funciona! Solo debería tener que instalar MAT para eclipsar y ahora funciona perfectamente. gracias
Paulius Vindzigelskis
3
Puede ser bueno actualizar para explicar que el usuario debe abrir las preferencias de Eclipse primero y luego seleccionar Android en el menú de la izquierda, etc.
Mick
1
en Luna necesitaba instalar MAT manualmente: Ayuda-> Instalar nuevo software: download.eclipse.org/mat/1.4/update-site
joecks
En mi Eclipse Mars.2 (4.5.2) (Win 10) "Abrir en Eclipse" ya está configurado y MAT está instalado, pero sigo recibiendo el error "versión desconocida de HPROF". Tuve que convertir el archivo con "hprof-conv".
Neph
7

hprof-conv Se cambió la ubicación de la herramienta.

Ahora está ubicado en AndroidSDK/platform-tools/hprof-conv

Sumoanand
fuente