所以我刚调试了一个段错误(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执行此类类型检查并报告有意义的错误(当然只是为了调试)?