且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JPDA 架构研究10 - Agent利用环境指针访问VM(局部变量管理篇)

更新时间:2022-09-28 13:13:05

引入:

上篇我们讲解了Agent如何利用环境指针访问VM的管理堆的操作。这里主要讲解如何管理局部变量。


分类6:局部变量管理

a.GetLocalObject. 获取局部对象

jvmtiError
GetLocalObject(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jobject* value_ptr)


b.GetLocalInt.获取局部整型值

jvmtiError
GetLocalInt(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jint* value_ptr)

它可以被用来获取整型,字符,字节,布尔型。


c.GetLocalLong.获取局部长整型值

jvmtiError
GetLocalLong(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jlong* value_ptr)


d.GetLocalFloat.获取局部的浮点值。

jvmtiError
GetLocalFloat(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jfloat* value_ptr)


e.GetLocalDouble.获取局部的双精度浮点值。

jvmtiError
GetLocalDouble(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jdouble* value_ptr)


f.SetLocalObject.设置局部对象。

jvmtiError
SetLocalObject(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jobject value)


g.SetLocalInt.设置局部整型变量。

jvmtiError
SetLocalInt(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jint value)

同样适用于整型,字符,字节,布尔型。


h.SetLocalLong.设置局部长整型变量。

jvmtiError
SetLocalLong(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jlong value)


i.SetLocalFloat.设置局部浮点变量。

jvmtiError
SetLocalFloat(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jfloat value)


j.SetLocalDouble.设置局部双精度浮点变量。

jvmtiError
SetLocalDouble(jvmtiEnv* env,
            jthread thread,
            jint depth,
            jint slot,
            jdouble value)




本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1587764,如需转载请自行联系原作者