我正在为 java 程序编写一个 jvmti 代理。我正在尝试读取堆栈上的对象。使用在 VMinit/vmstart 事件上收到的 jnienv 指针。我成功地使用以下方法在 methodexit 事件中读取对象: get varaible (slot) from getlocalvariableentry() ;从变量签名中使用 jni 函数获取对象,使用 getlocalobject 函数获取对象的引用对象/子类。然后如果它是对象的子类;jni::getobjectclass(); 使用返回的类并获取类中的字段;使用 getclassfields(); 然后从 getfieldname() 获取字段签名;然后根据其签名为该字段调用适当的函数,例如 getintfield() 用于 int 字段。但是,一旦我在引发 methodexit 事件的函数内的 try 块中创建的对象上尝试此操作;我每次在 Getobjectclass() 都会遇到崩溃(SIGSEGV)。这是因为对象已被破坏超出范围吗?如果是这样,如何在函数退出时读取函数的 try 块中的变量值。在读取 Integer (from localvariabletableentry) 对象的作业时获得崩溃,我调用 getintfield() 为其 int 字段成员 MIN_VALUE 这是它的第一个成员。如果我只是尝试读取 Integer 类的成员“值”然后调用 getintfield()不会崩溃。这是因为我试图读取一个类的静态最终成员,即崩溃。整数类的成员 MIN_VALUE。如何解决这个问题并避免崩溃?我为其 int 字段成员 MIN_VALUE 调用 getintfield(),这是它的第一个成员。如果我只是尝试读取 Integer 类的成员“值”,那么调用 getintfield() 不会崩溃。这是因为我试图读取一个类的静态最终成员,即崩溃。整数类的成员 MIN_VALUE。如何解决这个问题并避免崩溃?我为其 int 字段成员 MIN_VALUE 调用 getintfield(),这是它的第一个成员。如果我只是尝试读取 Integer 类的成员“值”,那么调用 getintfield() 不会崩溃。这是因为我试图读取一个类的静态最终成员,即崩溃。整数类的成员 MIN_VALUE。如何解决这个问题并避免崩溃?