我正在将一个复杂的C应用程序移植到Android,作为SO库,用瘦java层包装.
经过几个小时的麻烦,我在Android下编译代码,但当然,应用程序崩溃:(
经过几个小时的麻烦,我在Android下编译代码,但当然,应用程序崩溃:(
环顾四周后,我明白在Android下调试C应用程序的唯一方法是通过gdb.既然我对gdb没有很多经验,那么任何人都可以分享一些见解吗?
任何人都有Windows下的gdb教程:)?
谢谢
对于更新版本的NDK(我使用的是r7c),您可以构建调试版本
>将android:debuggable =“true”标志添加到< Application> AndroidManifest.xml中的标记
>使用NDK_DEBUG = 1调用ndk-build(如果使用unix shell运行ndk-build,则不需要NDK_DEBUG标志)
在Windows上,事情变得有点棘手,因为使用ndk-gdb,你仍然需要从NDK r7c开始使用bash(或cygwin),但是如果你使用任何一个pre-cash,运行在cygwin bash中的ndk-build会遇到权限问题内置静态库
我在Windows机器上的解决方案是
>将android:debuggable =“true”标志添加到AndroidManifest.xml中的< application标签(与上面相同)
>在cmd(windows’命令提示符)中:使用NDK_DEBUG = 1调用ndk-build
>在cygwin bash中:运行ndk-gdb
为了快速初步调查本机库,使用一个按钮创建一个简单的活动来触发库输入功能和loadLibrary在活动中,如:
class MyActivity extends Activity { static { System.loadLibrary("mylibrary"); } /* other functions like onCreate,etc... */ public native void libfunc(); public void onClick(View v){ libfunc(); } }
因此,当gdb启动时,实际加载了有问题的库,但在程序崩溃之前你仍然有时间设置断点等;当你完成设置调试器时,在(gdb)提示符下键入continue(或只是’c’),然后单击按钮启动崩溃程序并快乐调试…