2017-12-11 1 views
-1

Ich habe eine Frage zu ndk Ich habe eine Ausnahme im nativen Modul erstellt und versucht, die Ausnahme in der Java-Hauptanwendung zu implementieren, aber ich begegne SIGTRAP, wenn die App abstürzt. Haben Sie irgendwelche Hinweise?SIGTRAP tritt auf, wenn Exception in NDK implementiert

logcat

12-11 14:12:43.212 28091 28091 F libc : Fatal signal 5 (SIGTRAP), code 1 in tid 28091 (d2002.myndkapp3) 
12-11 14:12:43.267 444 444 F DEBUG : pid: 28091, tid: 28091, name: d2002.myndkapp3 >>> com.hhd2002.myndkapp3 <<< 
12-11 14:12:43.548 403 403 E lowmemorykiller: Error writing /proc/28091/oom_score_adj; errno=22 
12-11 14:12:43.551 474 474 I Zygote : Process 28091 exited due to signal (5) 
12-11 14:12:43.588 1231 3425 I ActivityManager: Process com.hhd2002.myndkapp3 (pid 28091) has died 

nativen Quelle

extern "C" 
JNIEXPORT jint 
JNICALL 
Java_com_hhd2002_myndkapp3_MainActivity_throwMyException(
     JNIEnv *env, 
     jobject instance) { 

    auto exClass = env->FindClass("java/lang/Exception"); 
    env->ThrowNew(exClass, 0); 
    env->DeleteLocalRef(exClass); 

} 

java Quelle

public class MainActivity extends AppCompatActivity { 

    static { 
     System.loadLibrary("native-lib"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
... 

     this.findViewById(R.id.btn_0).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       try { 
        throwMyException(); 
       } catch (Exception e) { 
        Log.d("mainactivity", e.toString()); 
       } 
      } 
     }); 
    } 

    private native int throwMyException() throws Exception; 
} 

Antwort

1

Es war mein Fehler. Der Funktionstyp von C++ muss einen Rückgabewert haben, aber dieser Code fehlt, Also habe ich die Rückgabe in void geändert.

extern "C" 
JNIEXPORT void 
JNICALL 
Java_com_hhd2002_myndkapp3_MainActivity_throwMyException(
     JNIEnv *env, 
     jobject instance) { 

    auto exClass = env->FindClass("java/lang/Exception"); 
    env->ThrowNew(exClass, 0); 
    env->DeleteLocalRef(exClass); 
} 
Verwandte Themen