【问题标题】:Debugging Android NDK, under windowswindows下调试Android NDK
【发布时间】:2010-07-13 14:54:04
【问题描述】:

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

环顾四周,我了解到在 Android 下调试 C 应用程序的唯一方法是通过 gdb。由于我对 gdb 没有太多经验,有没有人可以分享一些见解?

谁有windows下gdb的教程:)?

谢谢

【问题讨论】:

  • 不错,但我无法访问它:(
  • @ognian 您的链接帐户已被暂停...大声笑我也想知道这个问题的答案,因为我点击了 asnwers 链接,发现解决方案也不起作用。

标签: android android-ndk


【解决方案1】:

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

  1. AndroidManifest.xml 中将android:debuggable="true" 标志添加到<Application> 标记
  2. 使用 NDK_DEBUG=1 调用 ndk-build(如果使用 unix shell 运行 ndk-build,则不需要 NDK_DEBUG 标志)

在 Windows 上,事情变得有点棘手,因为要使用 ndk-gdb,从 NDK r7c 开始,您仍然需要 bash(或 cygwin),但在 cygwin bash 中运行的 ndk-build 如果您曾经使用过任何预建的静态库

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

  1. AndroidManifest.xml中添加android:debuggable="true"标志到<application标签(同上)
  2. 在 cmd(Windows 的命令提示符)中:使用 NDK_DEBUG=1 调用 ndk-build
  3. 在 cygwin bash 中:运行 ndk-gdb

为了快速初步了解原生so库,创建一个简单的Activity,一键触发库入口功能,在Activity中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'),然后点击按钮启动崩溃程序并进行愉快的调试......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-02-14
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多