Pobrałem pakiet SDK systemu Android dla systemów Linux i Android NDK. Zainstalowano ADT, zainstalowałem CDT.Debugowanie kodu Android NDK C/C++ w środowisku Eclipse - punkty przerwania nie są trafiane
Stworzyłem projekt Androida i dodano obsługę natywną (jni). Następnie napisałem natywną funkcję w kodzie java, który eksportuje w kodzie C++. W kodzie C++ zdefiniowałem tę funkcję.
Java-code:
static {
System.loadLibrary("test");
}
private native String get_text_from_cpp();
C++ kod (h):
extern "C"{
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}
C++ kod (CPP):
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
return env->NewStringUTF("hello from C++");
}
Kod działa bez błędów. Ale kiedy ustawiam punkt przerwania w kodzie C++, to nie jest trafiony.
build-NKD NDK_DEBUG = 1 - są wliczone
ja po tej instrukcji http://tools.android.com/recent/usingthendkplugin
Android.mk w JNI/ma LOCAL_CFLAGS: = -g
Czytałem bardzo dużo informacji, ale nie można dostosować Eclipse. Proszę, pomóżcie każdemu.
PS: Przykro mi, że mój angielski nie jest moim ojczystym językiem. Mam trudności z pisaniem.
Dodaj: Również podczas debugowania w konsoli pokazuje: „ostrzeżenie. Nie można załadować symbole biblioteki współdzielone dla 95 bibliotek, np/system/bin/łącznik Użyj«info sharedlibrary»polecenie, aby zobaczyć pełną listę . Czy potrzebujesz "set solib-search-path" lub "set sysroot"? ostrzeżenie: Nie można znaleźć funkcji dynamicznego linku łącznika GDB będzie ponawiał próbę.W tym czasie prawdopodobnie jest , że GDB nie może debugować inicjalizatorów bibliotek wspólnych lub rozwiązuj oczekujące punkty przerwania po dlopen(). "
Być może uruchomiłeś Debug, który uruchamia debager Java? Powinieneś kliknąć projekt prawym przyciskiem myszy i wybrać "debugowanie jako" -> "natywna aplikacja Android". –
Tak, wybrałem "debugowanie jako" -> "natywną aplikację dla Androida". W "Konfiguracjach debugowania" dodano nową konfigurację (w "Aplikacji natywnej Android") http://gyazo.com/567ae4fa0e8aa2363676789b7df780be – newman
Być może Twoja aplikacja uruchamia funkcję JNI bardzo wcześnie, aby debugger nie był jeszcze gotowy? Z opublikowanego kodu nie jest jasne, gdzie natywna metoda jest wywoływana.Proponuję przycisk w twojej Aktywności, który uruchomi natywną metodę. Następnie masz szansę spróbować kilka razy. –