是否可以在JVM编译器中强制执行字节码类型检查?

时间:2018-01-11 14:50:23

标签: java debugging bytecode bytecode-manipulation jvm-crash

所以我刚调试了一个段错误(C2编译器因某些方法而崩溃)。

错误消息是

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f478a832e6c, pid=7673, tid=139944974104320
#
# JRE version: Java(TM) SE Runtime Environment (7.0_65-b17) (build 1.7.0_65-b17)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x75fe6c]  PhaseIdealLoop::build_loop_late_post(Node*)+0x13c

由于原因最终证明是用于生成特定访问的辅助方法

,因此听起来要复杂得多。
aload 9
getfield #166                // Field my/somewhere/Some.thing:J

收到了错误的索引9,因此加载了一个完全错误的对象。

如果JVM刚刚抗议在调用my/somewhere/Some时堆栈顶部的对象不是getfield类型,那将会很方便。

有没有办法强制JVM执行此类类型检查并报告有意义的错误(当然只是为了调试)?

0 个答案:

没有答案