errore durante l'apertura del file HPROF: IOException: versione HPROF sconosciuta


121

Ricevo la seguente eccezione quando provo ad aprire il file HPROF (creato da 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)

Come risolvo questo problema?


sotto il sistema Windows potresti trovare utile questo post stackoverflow.com/questions/14168485/…
sivi

Risposte:


298

Il hproffile che ottieni da Android ha un formato specifico per Android. Dovresti convertire il hproffile take dal sistema operativo Android in hprofformato standard . Per questo puoi usare lo hprof-convstrumento che si trova in AndroidSDK/tools/hprof-conv.

Per esempio:

hprof-conv android.hprof mat.hprof

Quindi apri mat.hprof in Memory Analyzer.

EDIT: hprof-conv potrebbe trovarsi sotto AndroidSDK/platform-tools/in alcuni bundle.


6
@inazaruk hprof-conv veniva eseguito automaticamente quando si faceva clic sul pulsante di dump, non sono sicuro di quale versione di ADT abbia smesso di funzionare, ma è probabile che sia un bug
smith324

1
@ smith234, Potrebbe essere vero per il pulsante in DDMS. Ma quando Debug.dumpHprofData() viene utilizzato, la conversione dovrebbe essere eseguita manualmente.
inazaruk,

Tuttavia, ricevevo un errore di "autorizzazione negata" nella directory degli strumenti. Ho dovuto modificare le autorizzazioni in quella directory affinché funzionasse.
IgorGanapolsky

Errore di battitura: l'ultima versione di MAT richiede che l'estensione del nome del file sia hprof, non hpof come nell'esempio sopra.
greg7gkb

10
solo un avvertimento, il mio hprof-conv era sotto sdk \ platform-tools invece nel caso qualcuno lo avesse perso in sdk / tools
cjayem13

41

Se stai usando Eclipse, cambia semplicemente quanto segue:

  1. Apri Preferenze (dal menu Finestra)
  2. Vai su Android-> DDMS
  3. Modifica l'azione HPROF in "Apri in Eclipse"

In Windows 7 a 64 bit, non potevo convertire utilizzando lo hprof-convstrumento, semplicemente non faceva nulla. Quindi prova il tuo metodo e funziona! Dovrei solo installare MAT su eclipse e ora funziona perfettamente. grazie
Paulius Vindzigelskis

3
Potrebbe essere utile aggiornare per spiegare che l'utente deve prima aprire le preferenze di Eclipse e quindi selezionare Android dal menu a sinistra, ecc.
Mick

1
in Luna avevo bisogno di installare MAT manualmente: Aiuto-> Installa nuovo software: download.eclipse.org/mat/1.4/update-site
joecks

Nel mio Eclipse Mars.2 (4.5.2) (Win 10) "Apri in Eclipse" è già impostato e MAT è installato, tuttavia ricevo ancora l'errore "versione HPROF sconosciuta". Ho dovuto convertire il file con "hprof-conv".
Neph

7

hprof-conv la posizione dello strumento è stata modificata.

Ora si trova in AndroidSDK/platform-tools/hprof-conv

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.