在Windows下调试Android NDK

Noa*_*oam 7 android android-ndk

我正在将一个复杂的C应用程序移植到Android,作为一个SO库,用瘦java层包装.经过几个小时的麻烦,我在Android下编译代码,但当然,应用程序崩溃:(

环顾四周后,我明白在Android下调试C应用程序的唯一方法是通过gdb.既然我对gdb没有很多经验,那么任何人都可以分享一些见解吗?

任何人都有Windows下的gdb教程:)?

谢谢

Yen*_*chi 8

对于更新版本的NDK(我使用的是r7c),您可以通过构建调试版本

  1. android:debuggable="true"标记添加到<Application>标记中AndroidManifest.xml
  2. 调用ndk-buildNDK_DEBUG=1(与UNIX外壳NDK_DEBUG标志不是必要的,如果运行NDK,建立)

在Windows上,事情变得有点棘手因为使用ndk-gdb,你仍然需要从NDK r7c 开始使用bash(或cygwin),但是ndk-build如果你使用任何预先构建的静态库,在cygwin bash中运行会遇到权限问题

我在Windows机器上的解决方案是

  1. android:debuggable="true"标记添加到<application标记中AndroidManifest.xml(与上面相同)
  2. 在cmd(windows'命令提示符)中:ndk-build使用NDK_DEBUG=1
  3. 在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在gdb启动时,实际加载了有问题的库,但在程序崩溃之前,您仍然可以有时间设置断点等; 当您完成设置调试器时,在(gdb)提示符下键入continue(或只是' c'),然后点击按钮启动崩溃程序并快乐调试...