Java有字节码级别的单步动态调试工具吗
发布网友
发布时间:2022-04-23 09:14
我来回答
共1个回答
热心网友
时间:2022-04-08 12:42
作者:RednaxelaFX
链接:https://www.hu.com/question/36051329/answer/65735192
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
例如这个?Bytecode Visualizer不过题主想要的功能多半还得在上面这个工具的基础之上再扩展一下。我自己做字节码层面调试的时候通常就直接用JDK自带的jdb命令行调试器,支持字节码层面调试,不过用起来当然没有带GUI的工具那么直观咯。之前写的一篇博文里有用jdb举过例子:借HSDB来探索HotSpot VM的运行时数据。虽然那篇没有提到,但其实用 stepi 和 nexti 命令就可以在jdb里做字节码层面的单步调试(普通的基于代码行的单步调试命令则是 step 和 next,少个i后缀)。jdb的字节码层面调试最让人不爽的一点就是它不能在任意字节码指令上设断点。我以前用jdb都是只能设方法入口断点然后不断的 stepi 单步走到我要的指令上。这对稍微复杂一点的调试工作来说就极其纱布。jdb间接基于JVMTI实现,而JVMTI的SetBreakpoint函数其实是可以在任意字节码指令上设断点的,只要GetJLocationFormat返回1(JVMTI_JLOCATION_JVMBCI)。jdb直接基于的是JVMTI之上的Java层包装,JDI。它的本体入口在这里:jdk7u/jdk7u/jdk: e228aaace9c9 src/share/classes/com/sun/tools/example/debug/tty/TTY.java而断点相关的部分在这里:jdk7u/jdk7u/jdk: e228aaace9c9 src/share/classes/com/sun/tools/example/debug/tty/BreakpointSpec.java鼓捣鼓捣这里就能让它支持字节码指令层面(BCI,bytecode index)的断点…