[讨论] 关于HOTSPOT动态生成代码的调试技巧

docman 2011-04-21
在HOTSPOT调试中,codebuffer中的代码都是动态生成的,若执行到其中发生错误或异常,显然不能像普通程序一样设断点、查看调用栈等,一般可通过TraceBytecodes等选项确定出错的JAVA指令位置,即使是解释模式,一条JAVA指令涉及的本地指令也非常可观,大家有什么方法方便快速定位问题或理清调用关系?
RednaxelaFX 2011-04-21
要看出错是什么层次上的…具体来个场景?
docman 2011-04-22
比如,Xint运行时,在MacroAssembler::debug中报错,这不是第一现场,而要追踪到出错点比较麻烦
wkoffee 2011-04-23
简单看了一下,MacroAssembler::debug主要是被interpreter中的stop调用,stop会带一个msg参数,如果你的error log中打出了这个信息,你可以用这个msg去代码中搜索。如果你有debug版本的jvm的话可以直接设断点在MacroAssembler::debug中,然后根据stack回溯到出错函数。

Xint也出错,你们是不是正在移植到另一个cpu?
docman 2011-04-24
嗯,楼上正解,确实可以逐步回溯到出错点。我想问的是是否还有方便快速的方法,比如类似hsdis这样的辅助手段或技巧
RednaxelaFX 2011-05-03
docman 写道
嗯,楼上正解,确实可以逐步回溯到出错点。我想问的是是否还有方便快速的方法,比如类似hsdis这样的辅助手段或技巧

如果你是已经遇到了问题并且生成了core dump的话,用Serviceability Agent(SA)里的CLHSDB也可以的。它在$JAVA_HOME/lib/sa-jdi.jar里。
Global site tag (gtag.js) - Google Analytics