Android ndk 单步调试

1.设置NDK目录  在“Android”配置项上设置下“NDK”,选择NDK后,有一个选项“NDK Location”,这里配置NDK根目录。如下图:

 


2.添加NDK支持

Android项目上右键,选择“Android Tools”再添加Native的支持。




如果不需要调试,这时编译环境已经OK了


3.修改编译命令

,在C++ Build中设置Build command,把Use default选项去掉,在ndk-build后面添加参数NDK_DEBUG=1,使得编译出的SO带源码等调试信息。 如下图:



 

开发、编译、调试环境到这里算是OK了。调试具体的操作继续看下面。


4.解决 Unknown Application ABI

添加 Application.mk,内容如下

APP_PLATFORM := android-14 

版本号对应的是 android:minSdkVersion="14"


5.解决No Symbol table is loaded

整个编译运行没问题的前提下,在C\C++代码中加断点,运行时不能断住,加断点时日志提示“No symbol table is loaded.  Use the "file" command.”。

测试用JNI类:

public class MyTest {
 static {
  System.loadLibrary("jnitest");
    }
 public static native String test();
}


错误原因:
受NDK里Sample的影响,System.loadLibrary()做成了static,放在了JNI类里。JAVA在调用static块的时机是首次使用该类,也就是首次调用test方法的时候,我的App中,是在一个菜单item中调用的test方法。但是,ndk-gdb是在应用首次运行后,调用gdb.setup设定调试环境的,目前看,仅配置这一次。也就是说ndk-gdb配置调试环境时,JAVA虚拟机还没有loadLibrary,以后又不再进行配置,于是就产生了以上的错误。

解决方法:
将System.loadLibrary("jnitest");封装到一个static方法中,在onCreate中调用它。

吐槽:
调试是否能用,竟然跟代码有关,Google里的大神们,您这NDK都到r10了,还这个样子啊
顺便吐槽下ADT的界面开发功能,创建的资源竟然还需要手工关联代码,比15年前的VC6还不如啊,一种回到解放前的赶脚。不知道Google抛弃Eclipse后,自己搞的开发环境是否会好点,希望Google能从MS或者Borland挖几个人过来啊。


参考


http://qiang106.iteye.com/blog/1830416

http://blog.sina.com.cn/s/blog_44702ec60102venm.html

http://blog.csdn.net/s_xing/article/details/18351307



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值