erreur lors de l'ouverture du fichier HPROF: IOException: Version HPROF inconnue

121

J'obtiens l'exception suivante en essayant d'ouvrir le fichier HPROF (créé par Debug.dumpHprofData) avec 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)

Comment résoudre ça?

Asahi
la source
sous le système Windows, vous pourriez trouver ce message utile stackoverflow.com/questions/14168485/…
sivi

Réponses:

298

Le hproffichier que vous obtenez d'Android a un format spécifique à Android. Vous devez convertir hprofla prise de fichier du système d'exploitation Android au hprofformat standard . Pour cela, vous pouvez utiliser l' hprof-convoutil qui se trouve à AndroidSDK/tools/hprof-conv.

Par exemple:

hprof-conv android.hprof mat.hprof

Et puis ouvrez mat.hprof dans Memory Analyzer.

EDIT: hprof-conv peut être situé sous AndroidSDK/platform-tools/dans certains bundles.

inazaruk
la source
6
@inazaruk hprof-conv fonctionnait automatiquement en cliquant sur le bouton de vidage, je ne suis pas sûr de la version d'ADT qui a cessé de fonctionner, mais c'est probablement un bogue
smith324
1
@ smith234, cela peut être vrai pour le bouton dans DDMS. Mais quand Debug.dumpHprofData() est utilisé, la conversion doit être effectuée manuellement.
inazaruk le
J'obtenais néanmoins une erreur «permission refusée» dans le répertoire des outils. J'ai dû chmod des autorisations dans ce répertoire pour que cela fonctionne.
IgorGanapolsky
Typo: la dernière version de MAT nécessite que l'extension de nom de fichier soit hprof et non hpof comme dans l'exemple ci-dessus.
greg7gkb
10
juste un avertissement, mon hprof-conv était sous sdk \ platform-tools au cas où quelqu'un le manquerait sous sdk / tools
cjayem13
41

Si vous utilisez Eclipse, modifiez simplement ce qui suit:

  1. Ouvrir les préférences (à partir du menu Fenêtre)
  2. Accédez à Android-> DDMS
  3. Changez l'action HPROF en "Ouvrir dans Eclipse"
Apirak Lunla
la source
Dans Windows 7 64 bits, je ne pouvais pas convertir à l'aide de l' hprof-convoutil, cela ne faisait rien. Alors essayé votre méthode et ça marche! Je devrais juste avoir à installer MAT pour éclipse et cela fonctionne maintenant parfaitement. merci
Paulius Vindzigelskis
3
Il pourrait être bon de mettre à jour pour expliquer que l'utilisateur doit d'abord ouvrir les préférences Eclipse, puis sélectionner Android dans le menu de gauche, etc.
Mick
1
dans Luna, j'avais besoin d'installer MAT manuellement: Aide-> Installer un nouveau logiciel: download.eclipse.org/mat/1.4/update-site
joecks
Dans mon Eclipse Mars.2 (4.5.2) (Win 10) "Ouvrir dans Eclipse" est déjà défini et MAT est installé, mais j'obtiens toujours l'erreur "Version HPROF inconnue". J'ai dû convertir le fichier avec "hprof-conv".
Neph
7

hprof-conv l'emplacement de l'outil a été modifié.

Il est maintenant situé à AndroidSDK/platform-tools/hprof-conv

Sumoanand
la source