hotspot/src/share/vm/prims/jvmtiEnvBase.cpp
void
VM_GetThreadListStackTraces::doit() {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ResourceMark rm;
{- -------------------------------------------
(1) コンストラクタ引数で指定された全ての JavaThread に対して
VM_GetMultipleStackTraces::fill_frames() を呼び出し,
処理対象として登録しておく.
(なお, 引数に不正なポインタや Thread オブジェクトで無いものが混じっていた場合はこの時点でリターン)
---------------------------------------- -}
for (int i = 0; i < _thread_count; ++i) {
jthread jt = _thread_list[i];
oop thread_oop = JNIHandles::resolve_external_guard(jt);
if (thread_oop == NULL || !thread_oop->is_a(SystemDictionary::Thread_klass())) {
set_result(JVMTI_ERROR_INVALID_THREAD);
return;
}
fill_frames(jt, java_lang_Thread::thread(thread_oop), thread_oop);
}
{- -------------------------------------------
(1) VM_GetMultipleStackTraces::allocate_and_fill_stacks() を呼び出して,
スタックトレース情報を取得する.
---------------------------------------- -}
allocate_and_fill_stacks(_thread_count);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.