Android studio 在Android Studio JNI中观看指针

Android studio 在Android Studio JNI中观看指针,android-studio,java-native-interface,Android Studio,Java Native Interface,我对这个奇怪的问题感到困惑:当我进入JNI函数时,android studio 3.0.1调试器在变量视图中为指针显示了完全错误的值(包括“this”指针) #包括 T类 { 公众: 空隙a4(T*p,长pp) { T*_p=(T*)pp; bool b=p==\u p; bool b1=这个==p; boolb2=这个==\u p; } }; 外部“C”JNIEXPORT jstring JNICALL Java_com_simplesvc_myapplication_main activit

我对这个奇怪的问题感到困惑:当我进入JNI函数时,android studio 3.0.1调试器在变量视图中为指针显示了完全错误的值(包括“this”指针)

#包括
T类
{
公众:
空隙a4(T*p,长pp)
{
T*_p=(T*)pp;
bool b=p==\u p;
bool b1=这个==p;
boolb2=这个==\u p;
}
};
外部“C”JNIEXPORT jstring JNICALL
Java_com_simplesvc_myapplication_main activity_stringFromJNI(JNIEnv*env,jobject/*this*/)
{
T*p=新的T();
长pp=(长)p;
p->a4(p,pp);
return env->NewStringUTF(“你好”);
}
在进入之前:

之后:

正如您在屏幕截图上看到的,“this”的值是错误的,p参数的值在输入a4()后会发生变化。有趣的是,只要传递值(pp参数)就可以了。出于某种原因,它看起来像是AndroidStudio在变量视图中转换指针


你知道如何查看指针参数的正确值吗?

我注意到了同样的问题


我找到的唯一解决办法是使用打印而不是调试(并使用%p说明符)。然后我可以看到十六进制的实际指针值

看来我找到了解决方法:您必须在emulator中使用64位映像并为x86_64编译

android {
    ndk {
        abiFilters 'x86_64'
    }
}

实际上你已经做到了:安卓{defaultConfig{ndk{abiFilters'x86_64'}}
android {
    ndk {
        abiFilters 'x86_64'
    }
}