通过一个小Demo进行Debug库文件C/C++代码

在c/c++跨平台开发中,我们知道在windows上可以通过vs,进行单步断点调试,这非常方便。但是我们如果编译好的动态库so,想要跟踪下其流程及各个阶段,如,怎么跟踪ffmpeg/vlc等库内部demux流程,或是codec流程呢?今天通过一个小demo进行debug库文件c/c++代码。
一,下载 ndk 和构建工具 要编译和调试本地代码(native code),你需要下面的组件:
1、the android native development kit (ndk) : 让你能在 android 上面使用 c 和 c++ 代码的工具集。
2、cmake 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
3、lldb : android studio 上面调试本地代码的工匠。
注意:要在 android studio 中 使用 cmake 或者 ndk-build,你需要使用 android studio 2.2 或更高的版本,同时需要 配合使用 android plugin for gradle 2.2.0 及以上的版本。
安装上述组件:
如sdk tools 不显示lldb,cmake 和ndk,说明你配置了国内镜像站点!
要能上google官网才会显示,之前也是通过国内镜像,一直没显示出来!
tools > android > sdk manager >点击 sdk tools 选项卡。 勾选 lldb,cmake 和 ndk 。
已单独下载了 android-ndk-r11b所这里不再下载ndk!(最好勾选下载最新ndk) 点击 apply ,然后点击 ok 。
二,新建项目:
1、勾上 include c++ support
2、在最后一步时可选择不同的c++库
说明: 虽说是支持c/c++,但是不完全支持c/c++的全部特性,必须得按照 jni的约定来:具体可以参照 jni手册 c++ standard: 选择c++库
toolchain default: 默认 cmake 设置
c++ 11:支持c++11特性!
exceptions support(-fexceptions):
如果你想使用有关 c++ 异常处理的支持,就勾选它。勾选之后,android studio 会在 module 层的 build.gradle 文件中的 cppflags 中添加 -fexcetions 标志。
runtime type information support(-frtti): 如果你想支持 rtti,那么就勾选它。勾选之后,android studio 会在 module 层的 build.gradle 文件中的 cppflags 中添加 -frtti 标志。
说明:
native-lib.cpp: 自动生成的c++源文件
cmakelists.txt: cmake 脚本根据构建脚本的指令去编译一个 c++ 源文件,也就是 native-lib.cpp ,并将编译后的产物扔进共享对象库中,并将其命名为 libnative-lib.so ,然后 gradle 将其打包到 apk 中。
external build files 存放 cmake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 gradle 如何编译你的 app 一样,cmake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。
1、只需配置android标签节点下的buildtypes
a、选择run下拉item,选edit configurations,弹出配置窗体
b、点击➕新建 configuraionts,选android native条目
c、配置下native执行的名称如:hellojninative.
d、选择真机或模拟器调试.
断点调试运行
图1,图2是两种进行运行app-native的方式,选择app-native后,debug->app-native; 接下来就可以在c/c++文件中进行单步调试了。
这里暂留一个问题,如果是已经编译好的带符号表的动态库.so文件,如何进行调试呢?有兴趣读者可以留言交流下。

3D视觉引导上下料系统的特点是什么
科捷锂电“财务造假”影响甚远
中兴通讯实现5G VoNR通话,700M具备规模商用基础
GF已在其22FDX工艺中认证两项新思科技参考流程
FCom富士晶振参数比较分析之优势
通过一个小Demo进行Debug库文件C/C++代码
中科来方水性粘合剂如何革新电池技术?
电动汽车市场潜力巨大,LMI产品领跑动力电池3D视觉高端赛道
TDK磁传感器技术市场快速增长,磁传感技术优势明显,霍尔技术和TMR技术也不落下
起帆电缆2020年1-9月实现营收6,359,059,827.05元
铅酸蓄电池开关型充电器电路
一种强制检测式禁止酒后操作装置的设计
采用USB接口技术实现桩基测试数据采集的设计
聚焦新能源汽车与工业应用 第十二届高能效设计研讨会十月登陆上海
腾讯万超:数实融合 数字孪生进入“技术+应用”双驱动时代
5G正在加速部署中,6G离我们还有多远
苹果强迫零售商购买样机 iPhone开始强买强卖了
液晶电视怎么安装
对于显示器的连接线我们该如何选择
抢先看MIT测试比特币闪电网络,部署智能合约完成百万级交易吞吐量