Top


定義場所(file name)

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

説明(description)

// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// bytecode_count_ptr - pre-checked for NULL
// bytecodes_ptr - pre-checked for NULL

名前(function name)

jvmtiError
JvmtiEnv::GetBytecodes(methodOop method_oop, jint* bytecode_count_ptr, unsigned char** bytecodes_ptr) {

本体部(body)

  {- -------------------------------------------
  (1) method_oop 引数が NULL の場合は, JVMTI_ERROR_INVALID_METHODID エラーをリターン
      ---------------------------------------- -}

      NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);

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

      HandleMark hm;
      methodHandle method(method_oop);

  {- -------------------------------------------
  (1) methodOop から bytecode の大きさを取得し, その分だけメモリを確保する.
      (確保に失敗したらエラーをリターン)
      ---------------------------------------- -}

      jint size = (jint)method->code_size();
      jvmtiError err = allocate(size, bytecodes_ptr);
      if (err != JVMTI_ERROR_NONE) {
        return err;
      }

  {- -------------------------------------------
  (1) 引数の bytecode_count_ptr を取得した大きさに設定し, 
      JvmtiClassFileReconstituter::copy_bytecodes() でバイトコード情報を取得する.
      ---------------------------------------- -}

      (*bytecode_count_ptr) = size;
      // get byte codes
      JvmtiClassFileReconstituter::copy_bytecodes(method, *bytecodes_ptr);

  {- -------------------------------------------
  (1) リターン
      ---------------------------------------- -}

      return JVMTI_ERROR_NONE;
    } /* end GetBytecodes */

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