Login or Sign up

Android NDK: JNI 调试

Posted by: tigerz on Sept. 29, 2011

和其他开发套件一样,Android NDK 也提供了一些手段来帮助调试编写的 JNI。主要手段包括:

log

在 C/C++ 代码里,可以直接调用 Android 底层的 _androidlog_print,它的作用跟 SDK 的 Log 完全一样,就是 Jave 里 Log 的底层实现(我的猜想 ^_^).

#include <android/log.h>

#define TAG "your tag"
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__))

gdb

跟所有 Unix like 的环境一样,也可以用使用 gdb 来调试。Android NDK 提供了一个命令 ndk-gdb 便于 gdb 的使用。ndk-gdb 是一个 Shell 脚本,它会做一些环境的检查适配,帮我们在目标机上(Android 手机或者模拟器)启动 gdbserver,然后在 PC 上启动 gdb 并连接到 gdbserver,跟通用的 gdb 没有差别。

为了使用 ndk-gdb,有几个地方需要注意:

  1. 需要在 AndroidManifest.xml 里面给 application 加上属性 android:debuggable="true",充许调式
  2. JNI 的 Android.mk 编译选项要加调试信息 LOCAL_CFLAGS := -ggdb
  3. ndk-build 命令加参数 NDK_DEBUG=1

准备好 apk 后,启动 gdb

$ /cygdrive/c/Android/android-ndk-r6b/ndk-gdb --adb=/cygdrive/c/Android/android-sdk/platform-tools/adb.exe -s 0123456789ABCDEF --start

相关blog用 NDK 编写 JNI

Comments on This Post:

Please Login (or Sign Up) to leave a comment