I downloaded Android SDK Bundle for Linux and Android NDK. ADT was installed, I installed CDT.
I created a Android project and added native support (jni). Then I wrote native function in java-code which exporting in c++ code. In c++ code I defined this function.
Java-code:
static {
System.loadLibrary("test");
}
private native String get_text_from_cpp();
c++ code (h):
extern "C"{
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}
c++ code (cpp):
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
return env->NewStringUTF( "hello from C++" );
}
Code works without errors. But when I set breakpoint in c++ code it is not hit.
build-nkd NDK_DEBUG = 1 - are included
I followed this instructions http://tools.android.com/recent/usingthendkplugin
Android.mk in jni/ has LOCAL_CFLAGS := -g
I have read very much information but I could't customized Eclipse. Please, help anybody.
PS: I am sorry for my English is not my native language. I have difficulty in writing.
Add: Also during debug in console shows: "warning: Could not load shared library symbols for 95 libraries, e.g. /system/bin/linker. Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? warning: Unable to find dynamic linker breakpoint function. GDB will retry eventurally. Meanwhile, it is likely that GDB is unable to debug shared library initializers or resolve pending breakpoints after dlopen()."
The trick I use is to put a usleep call as the very first native line in my debug code.
This makes your thread sleep and gives the debugger a chance to be ready for you.
#include <unistd.h>
.
.
.
#ifndef NDEBUG
usleep(5000 * 1000);
#endif
After struggling a lot to debug on Eclipse this is my recipe:
Do the usual steps:
android.os.Debug.waitForDebugger();
before loading your native library. This might help.APP_OPTIM := debug
in Application.mk
ndk-build NDK_DEBUG=1
Then, what I found different:
adb pull /system/bin/linker <your_project_base_dir>/obj/local/armeabi/linker
Depending on your device you might have to write armeabi
or armeabi-v7a
. You only need to do it once (I noticed that running ndk-gdb
manually was doing that. Executing that command manually the breakpoints started to work)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With