2017-11-21 1 views
0

私は奇妙な問題で困惑しています:私はJNI関数アンドロイドスタジオに足を踏み入れるとき3.0.1デバッガが変数に完全に間違った値を示している(「この」ポインタを含む)のポインタ見ポインタが

#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"のスクリーンショット値は間違っていて、a4()に入った後にpパラメータの値が変わります。興味深いことに、長い値を渡す(ppパラメータ)がうまくいきます。それは変数でpointertsは、ポインタパラメータの正しい値を見るためにどのようにいくつかの理由

のための任意のアイデアを表示変換アンドロイドスタジオのように見えますか?

答えて

1

私はそれを修正する方法を発見したように見えます:アンドロイド{ defaultConfig { NDK { abiFilters:あなたはエミュレータで、64ビット画像を使用とx86_64

android { 
    ndk { 
     abiFilters 'x86_64' 
    } 
} 
+0

用にコンパイルする必要があり、実際にあなたがこれを行うしています'x86_64' } } } – Moyote

0

私は同じ問題に気付きました。私は考え出し

唯一の方法うち、こののはプリントを使用しての代わりに、デバッグ(および%pを指定子を使用)することでした。それで、実際のポインタ値を16進数で見ることができました。

関連する問題