hotspot/src/share/vm/prims/jvmtiEventController.cpp
// This change must always be occur when at a safepoint.
// Being at a safepoint causes the interpreter to use the
// safepoint dispatch table which we overload to find single
// step points. Just to be sure that it has been set, we
// call notice_safepoints when turning on single stepping.
// When we leave our current safepoint, should_post_single_step
// will be checked by the interpreter, and the table kept
// or changed accordingly.
void VM_ChangeSingleStep::doit() {
{- -------------------------------------------
(1) JvmtiEventControllerPrivate::set_should_post_single_step() を呼んで,
JvmtiExport::_should_post_single_step を変更する.
(なお, VM operation からでは変更できないので JvmtiEventControllerPrivate を経由しているらしい)
---------------------------------------- -}
JvmtiEventControllerPrivate::set_should_post_single_step(_on);
{- -------------------------------------------
(1) SingleStep イベントが有効化された場合には,
Interpreter::notice_safepoints() (をサブクラスがオーバーライドしたもの) を呼んでインタープリタに通知する.
(VM operation なのに, その中でもう一度 Interpreter::notice_safepoints() を呼ぶ必要が有るのか?? #TODO)
---------------------------------------- -}
if (_on) {
Interpreter::notice_safepoints();
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.