引入:java
上文咱們講解了Agent如何利用環境指針訪問VM的操做斷點部分,這裏咱們詳細講解觀察字段篇。這也是咱們調試期間用的最多的操做。由於咱們要不斷從Watch Field看他們值的改變。編程
分類8:觀察字段jvm
a.SetFieldAccessWatch.啓用對某字段進行訪問的觀察。每次訪問都會建立一個FieldWatch事件。編程語言
jvmtiError SetFieldAccessWatch(jvmtiEnv* env, jclass klass, jfieldID field)
從入參能夠看出,它要2個參數,一個是類,一個是類的字段,所以它會發起一個事件對某類的某字段進行觀察。注意,只有經過java編程語言或者JNI對該字段的訪問才能夠被觀察。ide
b.ClearFieldAccessWatch.清除對某字段訪問的觀察。指針
jvmtiError ClearFieldAccessWatch(jvmtiEnv* env, jclass klass, jfieldID field)
c.SetFieldModificationWatch.啓用對某字段進行修改的觀察。每次修改都會建立一個FieldModification事件。調試
jvmtiError SetFieldModificationWatch(jvmtiEnv* env, jclass klass, jfieldID field)
注意,只有經過java編程語言或者JNI對該字段的修改才能夠被觀察。事件
d.ClearFieldModificationWatch.清除對某字段修改的觀察。it
jvmtiError ClearFieldModificationWatch(jvmtiEnv* env, jclass klass, jfieldID field)