android NDK开发在本地C/C++源码中设置断点单步调试具体教程
近期在学android NDK开发,折腾了一天,最终可以成功在ADT中设置断点单步调试本地C/C++源码了。网上关于这方面的资料太少了,并且大都不全,并且调试过程中会出现各种各样的问题,真是非常磨人。程序员就得有耐心。
把自己的调试过程记录下来。希望对须要的朋友有帮助。
在看本文之前,请先确保你已经成功编译了一个android NDKproject,而且可以在模拟器或者真机上执行。至于怎么编译NDKproject,包含配置、生成.so文件等等。可以參考我的前一篇博客:http://blog.csdn.net/u013149325/article/details/40375455
首先,说一下我的开发环境配置:
win7 64位
ADT版本号: v22.6.2(已经集成了eclipse、CDT,建议大家都用最新版的ADT)
NDK版本号:android-ndk-r10c
Cygwin:官网下载地址:http://cygwin.com/install.html
至于Cygwin的安装和环境变量配置,网上非常多资料,在此不再赘述。
注:我试了,必须使用Cygwin运行NDK中的ndk-gdb脚本。才干在ADT中进入C/C++的断点。
一、在java程序中第一次调用native函数的地方加上断点。例如以下图:
二、打开jni目录下的cpp文件,依据须要设置断点。例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzE0OTMyNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
三、设置project为可调试模式:
在AndroidManifest的Application中设置Debuggable的值为true,例如以下图:
注:在C/C++ Build中的Builder Settings下也要设置ndk-build NDK_DEBUG=1
四、打开Cygwin。用cd命令定位到project文件夹下,我的是 cd /cygdrive/f/练习/androidTest
然后运行ndk-gdb命令。我的是 $NDK_ROOT/ndk-gdb --verbose --force
注意:一定要加上--force。否则会报错:Another debug session running,Use --force to kill it
假设报出 No symbol table is loaded. Use the "file" command
错误,则运行file命令把库加进来。例如以下:
file obj/local/armeabi-v7a/libTest.so
运行list或者l命令。能够每次显示10行C++源码。
五、在ADT中 Debug As->Android Native Application,假设控制台报错找不到库,就点Load那个button(因为当时没有截图。反正有3个button。你点中间那个),把jni目录下的cpp文件加进来。假设控制台显演示样例如以下图。你直接忽略错误,点Yes,这个时候假设不出意外,就会跳进C++中设置的断点。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzE0OTMyNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这个时候,我们就能够看到变量值、堆栈信息和一些汇编指令了。
注意:假设没有跳进你设置的断点,可能是本地调试还没開始程序就运行完成了,官网上也是这样解释的:
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. 链接:http://tools.android.com/recent/usingthendkplugin
你能够在java代码中恰当位置延迟几秒钟,这样就能保证程序运行到断点处本地调试程序已经开启。
能调试成功不easy啊,各位朋友假设遇到了问题,能够在博客下给我留言。我尽力帮忙解决。
android NDK开发在本地C/C++源码中设置断点单步调试具体教程的更多相关文章
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- MFC源码不能设置断点调试
用VS2013中MFC开发应用程序时,进入MFC源码设置断点调试.但是在调试过程中发现无法进入源码.最后发现在MFC设置的MFC的使用默认值是在共享dll中使用MFC,这就意味着MFC中的源码并没有连 ...
- windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)
郑重申明:如需转载本博客,请注明出处,谢谢! 这几天在学习android NDK的开发.那么首先让我们来看看android NDK开发的本质是什么. NDK(Native Development Ki ...
- Android NDK开发入门实例
AndroidNDK是能使Android应用开发者把从c/c++编译而来的本地代码嵌入到应用包中的一系列工具的组合. 注意: AndroidNDK只能用于Android1.5及以上版本中. I. An ...
- vlc源码分析(七) 调试学习HLS协议
HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Vide ...
- Android NDK 开发(二) -- 从Hlello World学起【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719 上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...
- android NDK开发环境搭建
android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...
- Android NDK 开发(四)java传递数据到C【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...
- Android NDK 开发(三)--常见错误锦集合Log的使用【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511 Android NDK开发经常因某些因素会出现一些意想不到的错误, ...
随机推荐
- 7 C#变量-把你想要的东西存在C#程序里边
现在你已经可以用Console.WriteLine("")在dos窗口里打印一些东西出来,而且你还会使用c#进行数学运算.接下来的一步你要开始学习使用变量了.用c#编程,变量就是一 ...
- 使用UAParser在C#MVC项目中如何判断用户是在用什么设备进行访问(手机,平板还是普通的电脑)
现在我们开发的很多web应用都要支持手机等移动设备.为了让手机用户能有更加好的用户体验,我们经常为手机设备专门准备一套前端的页面.这样当用户使用普通电脑来访问的时候,我们的应用就向用户展示普通电脑的页 ...
- Spring Cloud (14) 服务网关-过滤器
Spring Cloud Zuul作为网关所具备的最基本的功能:路由,还具备另外一个核心的功能:过滤器. 过滤器 通过Spring Cloud Zuul实现的路由功能,我们的微服务可以通过统一的API ...
- P2639 [USACO09OCT]Bessie的体重问题Bessie's We…
题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H & ...
- JAVA趣味逻辑算法
/**已知4位同学中的一位数学考了100分,当小李询问这4位是谁考了100分时,4个人的回答如下: A说:不是我. B说:是C C说:是D. D说:他胡说. 已知三个人说的是真话,一个人说的是假话.现 ...
- vue学习笔记(六)— 关于Vuex可以这样简单理解
关于Vuex可以这样简单理解 作者:狐狸家的鱼 本文链接:关于Vuex GitHub:sueRimn 概念理解 和大多数文章都一样,从概念解释到引出问题再举例解决问题. 官网中,Vuex是状态管理模式 ...
- Git环境部署
部署git 服务器环境 系统环境准备 192.168.30.25 master git gitlab 192.168.30.26 client git 关闭防火墙 ...
- C# 后台POST提交方式
1.第一种方式:用最新框架,但是针对IIS服务器的操作系统有关系,非R2的收不到数据: using (var reqConts = new MultipartFormDataContent()) { ...
- CVPR 2017 Paper list
CVPR2017 paper list Machine Learning 1 Spotlight 1-1A Exclusivity-Consistency Regularized Multi-View ...
- sysbench_fileio.sh
当我--file-total-size=30G 并且指定3个文件的时候,结果是产生3个10G的文件,然而--max-time=20被忽视了,虽然指定了20s的限制,实际上是在prepare阶段,--m ...