1

我克隆了 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

叫做。

4

0 回答 0