代码之家  ›  专栏  ›  技术社区  ›  avestnik

在Android Studio JNI中观看指针

  •  0
  • avestnik  · 技术社区  · 7 年前

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

    #include <jni.h>
    
    class T
    {
    public:
        void a4(T* p, long pp)
        {
            T *_p = (T *) pp;
            bool b = p == _p;
            bool b1 = this == p;
            bool b2 = this == _p;
        }
    };
    
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_simplesvc_myapplication_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */)
    {
        T *p = new T();
        long pp = (long) p;
        p->a4(p, pp);
    
        return env->NewStringUTF("hello");
    }
    

    进入之前:

    before

    之后:

    after

    正如您在屏幕截图上看到的,“this”的值是错误的,并且p参数的值在输入a4()后发生变化。有趣的是,只要传递值(pp参数)就可以了。由于某种原因,在变量视图中看起来像android studio convert pointerts

    你知道如何观察指针参数的正确值吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   avestnik    7 年前

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

    android {
        ndk {
            abiFilters 'x86_64'
        }
    }
    
        2
  •  0
  •   Moyote    7 年前

    我注意到了同样的问题。