I am porting a complex C application to Android, as an SO library, wrapped with thin java layer. After few hours of hassle, i have the code compiling under Android, but of course, the application crashes :(
After looking around, i understand the only way to debug C application under Android is by gdb. Since I don't have a lot of experience with gdb, any one out there can share some insights?
Anyone has a tutorial for gdb under windows :) ?
thx
for a more recent version of NDK (I am using r7c), you can build debug version by
android:debuggable="true"
flag to <Application>
tag in AndroidManifest.xml
ndk-build
with NDK_DEBUG=1
(NDK_DEBUG flag not necessary if running ndk-build with unix shell)on Windows, things get a bit tricky because to use ndk-gdb
, you still need bash (or cygwin) as of NDK r7c, yet ndk-build
running in cygwin bash will run into permission problem if you ever use any of the pre-built static library
my solution on windows machine is
android:debuggable="true"
flag to <application
tag in AndroidManifest.xml
(same as above)ndk-build
with NDK_DEBUG=1
ndk-gdb
for quick initial investigation of native so library, create a simple activity with one button to trigger library entry function and loadLibrary
in the activity like:
class MyActivity extends Activity {
static {
System.loadLibrary("mylibrary");
}
/* other functions like onCreate, etc... */
public native void libfunc();
public void onClick(View v){
libfunc();
}
}
So when gdb
starts, the library in question is actually loaded, yet you can still have time to set break points, etc before the program crashes; when you finish setting up the debugger, at (gdb)
prompt, type continue
(or just 'c
'), then hit the button to start the crashing program and happy debugging...
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