Top


定義場所(file name)

hotspot/src/share/vm/prims/jvmtiExport.cpp

説明(description)

//
// JVMTI single step management
//

名前(function name)

void JvmtiExport::at_single_stepping_point(JavaThread *thread, methodOop method, address location) {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(JvmtiExport::should_post_single_step(), "must be single stepping");

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      HandleMark hm(thread);
      methodHandle mh(thread, method);

  {- -------------------------------------------
  (1) 処理対象のスレッドの JvmtiThreadState を取得する.
      JvmtiThreadState がまだ作られていなければ
      (明らかにこのタイミングでのイベント通知は不要なので) ここでリターン.
      ---------------------------------------- -}

      // update information about current location and post a step event
      JvmtiThreadState *state = thread->jvmti_thread_state();
      if (state == NULL) {
        return;
      }

  {- -------------------------------------------
  (1) (トレース出力)
      ---------------------------------------- -}

      EVT_TRIG_TRACE(JVMTI_EVENT_SINGLE_STEP, ("JVMTI [%s] Trg Single Step triggered",
                          JvmtiTrace::safe_get_thread_name(thread)));

  {- -------------------------------------------
  (1) (以降の処理は, SingleStep モードが隠蔽されていない (= hide_single_stepping() が false) 場合にのみ行う)

      (なお, JvmtiThreadState::hide_single_stepping() は, 
       JvmtiHideSingleStepping により一時的に SingleStep モードが停止されているかどうかを返す.
       (See: JvmtiHideSingleStepping))
      ---------------------------------------- -}

      if (!state->hide_single_stepping()) {

    {- -------------------------------------------
  (1.1) もし PopFrame() 関数によって現在の関数フレームが破棄されることになっていれば, 
        JvmtiThreadState::process_pending_step_for_popframe() を呼ぶ.
        (See: [here](no2935cDo.html) for details)
        ---------------------------------------- -}

        if (state->is_pending_step_for_popframe()) {
          state->process_pending_step_for_popframe();
        }

    {- -------------------------------------------
  (1.1) もし ForceEarlyReturn*() 関数によって現在の関数フレームが破棄されることになっていれば, 
        JvmtiThreadState::process_pending_step_for_earlyret() を呼ぶ.
        (See: [here](no3059azN.html) for details)
        ---------------------------------------- -}

        if (state->is_pending_step_for_earlyret()) {
          state->process_pending_step_for_earlyret();
        }

    {- -------------------------------------------
  (1.1) JvmtiExport::post_single_step() を呼んで, 
        JVMTI_EVENT_SINGLE_STEP が有効になっている全てのスレッドにイベントを送付する.
        ---------------------------------------- -}

        JvmtiExport::post_single_step(thread, mh(), location);
      }
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.