Я клонировал исходный код OpenJDK8 и хотел проверить, где именно вызывается обратный вызов JVMTI Breakpoint
. Я обнаружил, что все точки останова хранятся в списке типа 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
.