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.