Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1159595
  • 博文数量: 139
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1712
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 23:10
个人简介

每天进步一点点。

文章分类

全部博文(139)

文章存档

2015年(3)

2014年(11)

2013年(25)

2011年(1)

2009年(3)

2008年(29)

2007年(45)

2006年(22)

分类: Android平台

2015-12-05 22:42:39

最近需要解决一个在NDK层运行的代码的问题,需要单步跟踪调试。在网络上找了很多介绍来看,我按照他们的介绍做了,可是就是无法单步跟踪。经过多次折腾,终于搞明白原因了。简单的来说,就是gdbsever启动需要几秒钟,如果NDK层的代码在此之前被执行了则设置在C代码中的断点就无法起作用。而我写的Java层测试代码非常简单,直接在OnCreate函数中调用了JNI层的代码,此时gdb还没有启动起来。

可以在这个位置看到设置NDK层代码调试的方法:

简单的总结如下:
1.在windows->preference->android设置SDK路径,这个是废话,不设置这个怎么开发Android程序

2.在windows->prefernece->android->ndk指定NDK的路径:


3. Android Tools -> Add native support

4.写好JNI层的代码

5.在project -> properties -> C/C++ Build:
添加NDK_DEBUG=1


6.在C层的代码中设置断点。

7.在项目上面右键,选择Debug As -> Android Native Application

8.一定要注意其中的一段说明:
Note: There is a delay of a few seconds between when the activity is launched and when native debugging starts. If your code is already executed by that point, then you won’t see the breakpoint being hit. So either put a breakpoint in code that is called repetitively, or make sure that you call JNI code after you see that ndk-gdb has connected.

9.所以,可以考虑将进入NDK层的代码设置为UI界面的控件触发,这样就可以控制时间,等到gdbsever启动好了再调试NDK层代码。

10.进入以后的效果如下:


阅读(4426) | 评论(0) | 转发(0) |
0

上一篇:Auditon 批处理

下一篇:没有了

给主人留下些什么吧!~~