我克隆了 OpenJDK8 的源代码并想检查 JVMTIBreakpoint
回调的确切调用位置。我发现所有断点都存储在类型列表中JvmtiBreakpoint
。我找不到的是触发断点事件的确切位置。
编辑:我找到了这个方法,但不确定这是否会触发事件:
JvmtiExport::post_raw_breakpoint
由以下人员调用:
InterpreterRuntime:_breakpoint
这将我带到bytecodeInterpreter.cpp
调用此方法的文件。在这个文件中,我们有:
switch (opcode):
...
CASE(_breakpoint): {
...
CALL_VM(InterpreterRuntime::_breakpoint(THREAD, METHOD, pc), handle_exception);
...}
但是我仍然不明白当我在代码中放置断点时会发生什么?JVM 是否在该位置检测字节码并放置断点操作码?
Edit2:我发现在设置断点时,最终
Method::set_breakpoint
叫做。