Android NDK, Revision 8d (December 2012)

前一篇,简单介绍了使用NDK进行JNI的编程实践,当时使用的NDK版本是1.6_r1(2009),是很早的版本了,相应的toolset也就只包含了少数简单的命令。

JNI编程,必然涉及到C编程,那么当ApplicationC函数中遇到了错误,甚至crash(如Segmentation fault’Process xxx terminated by signal (11)’)时,就需要调试。可是在logcat中的信息就跟天书一样,只能找到一些寄存器以及函数地址。那要如何进行调试呢?

NDK r5b开始,增加了调试的支持,引入了ndk-gdb(可以单步调试程序)ndk-stack(可以查看堆栈信息)脚本。那么下面我们就来说说如何使用 Android NDK, Revision 8d

一、下载Android NDK, Revision 8d,解压即可。(E:\android-ndk-r8d)

二、Cygwin配置

ultraEdit打开Cygwin/home/user/.bash_profile,在文件最后加入如下内容:

export ndk8=/cygwin/e/ android-ndk-r8d

Cygwin终端输入如下命令:

source /home/user/.bash_profile

或者重启Cygwin终端。

如果cd $ndk8能进入/cygwin/e/ android-ndk-r8d,那么配置成功。

三、编译.so

Cygwin终端进入Andorid工程根目录如../MyJni/project/后,直接输入:ndk-build

就可以编译安装.so文件最后会在project/下新增两个文件夹:

libs/armeabi/

obj/

以上过程基本和使用NDK1.6_r1一样。下面主要介绍ndk-adb使用方法。

1、 重新编译,并且加入NDK_DEBUG=1选项,即:ndk-build NDK_DEBUG=1

2、 运行ndk-adb

3、 设置断点,

(gdb) b 10

Breakpoint 1 at 0x80901244: file jni/MyJni.c, line 10.

(gdb) c

Continuing.

Program received signal SIGSEGV, Segmentation fault.

0xafd1cb6a in strcat () from E:\eclipse\MyJni\project/./obj/local/armeabi/libc.so

很明显上面的程序出现了Segmentation fault。具体错在0xafd1cb6a in strcat ()函数。

而在logcat中你只能看到如下信息:

01-21 08:36:12.487: I/DEBUG(30): *** *** *** *** *** *** *** *** *** *** *** *** *** ***

01-21 08:36:12.487: I/DEBUG(30): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'

01-21 08:36:12.487: I/DEBUG(30): pid: 308, tid: 308 >>> com.jni.testjni <<<

01-21 08:36:12.495: I/DEBUG(30): signal 11 (SIGSEGV), fault addr 00000000

01-21 08:36:12.495: I/DEBUG(30): r0 beebf43c r1 00000000 r2 beebf480 r3 00000000

01-21 08:36:12.495: I/DEBUG(30): r4 afd489b0 r5 00000000 r6 00000000 r7 beebf430

01-21 08:36:12.565: I/DEBUG(30): #00 pc 0001cb6a /system/lib/libc.so

01-21 08:36:12.565: I/DEBUG(30): #01 lr 8090158b /data/data/com.jni.testjni/lib/libHelloJni.so

……….

logcat对比,显然gdb的内容对开发人员更有帮助。

更多相关文章

  1. C语言函数的递归(上)
  2. android binder 基础实例及解析(一)
  3. Android下的PVPlayer的实现
  4. Android中Linux suspend/resume流程
  5. Android(安卓)MMS专题
  6. android第二周小结
  7. android 4.4 按键分析三
  8. Android(安卓)Audio代码分析26 - Audio Strategy
  9. 移动支付之Android(安卓)HCE的基本使用

随机推荐

  1. android默认系统日期、时间、时区更改
  2. Android(安卓)- Android(安卓)的消息机制
  3. Android(安卓)Layout文件的属性说明
  4. Windows Phone 7 不温不火学习之《ListBo
  5. Android(安卓)画图之Matrix(二)
  6. Android(安卓)源代码目录结构1 - bionic
  7. android “分享”功能的实现
  8. Android的文件系统
  9. Android(安卓)NDK1、Android(安卓)NDK带
  10. android中的http框架,使其更加简单易用