เกิดข้อผิดพลาดในการเปิดไฟล์ HPROF: IOException: Unknown HPROF Version


121

ฉันได้รับข้อยกเว้นต่อไปนี้เมื่อพยายามเปิดไฟล์ HPROF (สร้างโดยDebug.dumpHprofData) ด้วย 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)

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


ภายใต้ระบบ windows คุณอาจพบว่าโพสต์นี้มีประโยชน์ stackoverflow.com/questions/14168485/…
sivi

คำตอบ:


298

hprofไฟล์ที่คุณได้รับจาก Android มีรูปแบบเฉพาะหุ่นยนต์ คุณควรแปลงhprofไฟล์จาก Android OS เป็นhprofรูปแบบมาตรฐาน สำหรับนี้คุณสามารถใช้เครื่องมือที่ตั้งอยู่ที่hprof-convAndroidSDK/tools/hprof-conv

ตัวอย่างเช่น:

hprof-conv android.hprof mat.hprof

จากนั้นเปิด mat.hprof ใน Memory Analyzer

แก้ไข: hprof-conv อาจอยู่ภายใต้AndroidSDK/platform-tools/ในบางกลุ่ม


6
@inazaruk hprof-conv ใช้เพื่อทำงานโดยอัตโนมัติเมื่อคลิกปุ่มถ่ายโอนข้อมูลฉันไม่แน่ใจว่า ADT เวอร์ชันใดที่หยุดทำงาน แต่น่าจะเป็นข้อผิดพลาด
smith324

1
@ smith234 อาจเป็นจริงสำหรับปุ่มใน DDMS แต่เมื่อใดที่Debug.dumpHprofData() จะใช้การแปลงควรทำด้วยตนเอง
inazaruk

ฉันได้รับข้อผิดพลาด 'ปฏิเสธการอนุญาต' ในไดเรกทอรีเครื่องมืออย่างไรก็ตาม ฉันต้อง chmod สิทธิ์ในไดเร็กทอรีนั้นเพื่อให้มันทำงานได้
IgorGanapolsky

พิมพ์ผิด: MAT เวอร์ชันล่าสุดกำหนดให้นามสกุลไฟล์เป็น hprof ไม่ใช่ hpof ตามตัวอย่างด้านบน
greg7gkb

10
เพียงแค่หัวขึ้น hprof-conv ของฉันอยู่ภายใต้ sdk \ platform-tools แทนในกรณีที่ใครพลาดภายใต้ sdk / tools
cjayem13

41

หากคุณใช้ Eclipse ให้เปลี่ยนสิ่งต่อไปนี้:

  1. เปิดการตั้งค่า (จากเมนูหน้าต่าง)
  2. ไปที่ Android-> DDMS
  3. เปลี่ยนการดำเนินการ HPROF เป็น "เปิดใน Eclipse"

ใน Windows 7 64 บิตฉันไม่สามารถแปลงโดยใช้hprof-convเครื่องมือได้ แต่ก็ไม่ได้ทำอะไรเลย ลองใช้วิธีของคุณแล้วก็ได้ผล! ฉันควรจะต้องติดตั้ง MAT เพื่อคราสและตอนนี้มันทำงานได้อย่างสมบูรณ์ ขอบคุณ
Paulius Vindzigelskis

3
อาจเป็นการดีที่จะอัปเดตเพื่ออธิบายว่าผู้ใช้ควรเปิดการตั้งค่า Eclipse ก่อนจากนั้นเลือก Android จากเมนูด้านซ้ายเป็นต้น
มิก

1
ใน Luna ฉันต้องติดตั้ง MAT ด้วยตนเอง: Help-> ติดตั้งซอฟต์แวร์ใหม่: download.eclipse.org/mat/1.4/update-site
joecks

ใน Eclipse Mars.2 (4.5.2) (Win 10) "เปิดใน Eclipse" ของฉันถูกตั้งค่าไว้แล้วและติดตั้ง MAT แล้ว แต่ฉันยังคงได้รับข้อผิดพลาด "เวอร์ชัน HPROF ที่ไม่รู้จัก" ฉันต้องแปลงไฟล์ด้วย "hprof-conv"
Neph

7

hprof-conv ตำแหน่งเครื่องมือมีการเปลี่ยนแปลง

ตอนนี้ตั้งอยู่ที่ AndroidSDK/platform-tools/hprof-conv

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.