hotspot/src/share/vm/prims/jvmtiEnv.cpp
jvmtiError
JvmtiEnv::NotifyFramePop(JavaThread* java_thread, jint depth) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ResourceMark rm;
uint32_t debug_bits = 0;
{- -------------------------------------------
(1)
---------------------------------------- -}
JvmtiThreadState *state = JvmtiThreadState::state_for(java_thread);
if (state == NULL) {
return JVMTI_ERROR_THREAD_NOT_ALIVE;
}
if (!JvmtiEnv::is_thread_fully_suspended(java_thread, true, &debug_bits)) {
return JVMTI_ERROR_THREAD_NOT_SUSPENDED;
}
if (TraceJVMTICalls) {
JvmtiSuspendControl::print();
}
vframe *vf = vframeFor(java_thread, depth);
if (vf == NULL) {
return JVMTI_ERROR_NO_MORE_FRAMES;
}
if (!vf->is_java_frame() || ((javaVFrame*) vf)->method()->is_native()) {
return JVMTI_ERROR_OPAQUE_FRAME;
}
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(vf->frame_pointer() != NULL, "frame pointer mustn't be NULL");
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
int frame_number = state->count_frames() - depth;
{- -------------------------------------------
(1) JvmtiEnvThreadState::set_frame_pop() を呼んで, 指定された frame 番号(frame_number)を記録する.
---------------------------------------- -}
state->env_thread_state(this)->set_frame_pop(frame_number);
{- -------------------------------------------
(1) リターン
---------------------------------------- -}
return JVMTI_ERROR_NONE;
} /* end NotifyFramePop */
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.