我有一个使用一些本机代码的 Java 应用程序,但它出现了错误。我想找出哪里出了问题,但我不知道如何读取 hs_err_pid 转储文件:
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x256cbc]
V [libjvm.so+0x25df69]
V [libjvm.so+0x25dbac]
V [libjvm.so+0x25e8c8]
V [libjvm.so+0x25e49f]
V [libjvm.so+0x16fa3e]
j br.com.cip.spb.single.SPBRequestApplicationController.processJob(Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ApplicationDataJob;)V+158
j com.planet.core360.cgen.CgenProcessor.processJob(Ljava/lang/String;Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ApplicationDataJob;)V+108
j com.planet.core360.cgen.CgenProcessor.processJob(Ljava/lang/String;Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ScheduledJob;)V+7
v ~StubRoutines::call_stub
V [libjvm.so+0x17af0c]
V [libjvm.so+0x28b9d8]
V [libjvm.so+0x17ad3f]
V [libjvm.so+0x1a58a3]
V [libjvm.so+0x18bc24]
C [cgen+0xa6d6]
C [cgen+0xae1e] cgen_process_job+0x336
C [cgen+0x10442]
C [cgen+0x7714]
C [cgen+0x38216]
C [cgen+0x3a29d]
C [cgen+0x37e3c]
C [cgen+0x7558]
C [libc.so.6+0x166e5] __libc_start_main+0xe5
基本上,“j”帧指向什么?
V+158
是指
类中的字节码偏移量?怎样才能从这件事追溯到源头
正在播放台词?
实际上,我想要一份关于探索这些垃圾场的一般指南。那也太棒了。
有关一般指南,请查看这两个链接 致命错误日志故障排除 和 JVM 崩溃分析速成课程
我也很困惑,“V+158”是什么意思? 不过解释很简单,“V”是方法返回类型,是方法描述的一部分。 (描述由包名、类名、方法名、方法所采用的参数类型和返回类型组成)“V”代表“void”。
+158 是所谓的“字节码索引” - 你是对的。