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 win开发者_JAVA百科dows :) ?
thx
for a more recent version of NDK (I am using r7c), you can build debug version by
- add
android:debuggable="true"flag to<Application>tag inAndroidManifest.xml - invoke
ndk-buildwithNDK_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
- add
android:debuggable="true"flag to<applicationtag inAndroidManifest.xml(same as above) - in cmd (windows' command prompt): invoke
ndk-buildwithNDK_DEBUG=1 - in cygwin bash: run
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...
加载中,请稍侯......
精彩评论