在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

buildTypes{    debug{jniDebuggable truejniDebuggable = true}
}

2、配置AndroidManifest属性:android:debuggable="true"

<application android:label="@string/app_name"             android:debuggable="true"><activity android:name=".HelloJni"              android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" />            <category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>

3、配置Run/Debug configurations

  • a、选择run下拉item,选Edit Configurations,弹出配置窗体

  • b、点击➕新建 configuraionts,选android native条目

  • c、配置下native执行的名称如:hellojniNative.

  • d、选择真机或模拟器调试.

断点调试运行

图1

图2

图1,图2是两种进行运行app-native的方式,选择app-native后,debug->app-native; 接下来就可以在C/C++文件中进行单步调试了。

这里暂留一个问题,如果是已经编译好的带符号表的动态库.so文件,如何进行调试呢?有兴趣读者可以留言交流下。

Android Studio如何Debug对应so文件C/C++代码相关推荐

  1. Android studio 使用心得(六)---android studio 如何加载.so文件

    2019独角兽企业重金招聘Python工程师标准>>> 之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上 ...

  2. android studio 的debug证书在哪里,Android Studio debug.keystore位置介绍

    如果你在网上搜debug.keystore的位置,大部分文章都会告诉你在 C:\Users\XXX\.android 目录下,但我电脑的该目录下确实没有这个文件,放入同事的debug.keystore ...

  3. Android Studio中打开R.java文件的方法

    1 R.java文件简介 Android Studio中的R.java文件自动收录当前应用中所有的资源,并根据这些资源建立响应的ID,可以把R.java当成Android应用的资源字典.R.java文 ...

  4. android studio中把c/c++文件编译成.so库(一)

    2019独角兽企业重金招聘Python工程师标准>>> 最近的项目涉及到JNI编程,经过一段时间的JNI编程之后,终于完美弄完了.所以,把在android studio中编译c/c+ ...

  5. android studio DDMS debug process 无法激活,小虫子灰色

    android studio DDMS debug process 无法激活,小虫子灰色. 如下图,请问什么问题

  6. Android Studio 设置打开layout.xml文件的默认视图

    Android Studio 设置打开layout.xml文件的默认视图 Android Studio 设置打开layout.xml文件的默认视图 androd studio 在使用的时候打开我们自己 ...

  7. Android Studio DeviceFileExplorer 看不到文件列表问题

    Android Studio DeviceFileExplorer 看不到文件列表问题 问题:部分机器,有root权限,但在Android Studio 的 DeviceFileExplorer 内看 ...

  8. List.size() 问题 Android studio: Verbose,Debug,Info,Warn,Error

    目录 List.size() 问题 Android studio: Verbose,Debug,Info,Warn,Error List.size() 问题 list下标从0开始 假设list.siz ...

  9. android创建布局文件,android学习——Android Studio下创建menu布局文件

    一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...

  10. Android Studio 1.5+ 中调试Native和Java代码

    Android Studio 1.5+ 中调试Native和Java代码 步骤如下 1.安装了1.5版+的Android Studio 2.安装LLDB:(LLDB是Low Level DeBugge ...

最新文章

  1. 利用CNN来检测伪造图像
  2. 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
  3. 启用CentOS6.5 64位安装时自带的MySQL数据库服务器
  4. linux 下开源常见监控软件
  5. SQL-SQLServer(926)
  6. 关于Android的一些设计【转】
  7. iOS GPUImage之滤镜功能说明
  8. java线程内存模型_深度解析Java多线程的内存模型
  9. uva 11134——Fabled Rooks
  10. 天津海运[600751]股票
  11. update两个表中的同一字段的数据_用Python实现多个工作簿中的数据按列合并到同一个工作表中...
  12. php过滤文件中的空行,如何从PHP文本中删除空行?
  13. jquery 自定义正方形图标_当你在玩 iOS14自定义图标时,有人用它赚了70万了!
  14. JavaScript的Date类的函数特殊处理导致的问题
  15. Atitit 在线机器人 自动化技术一览 目录 1. 俩个要点 1 1.1. 识别控件(对话框 按钮 列表等) 1 1.2. Dom控件操作 1 1.3. 鼠标键盘操作 api 1 2. 可以使用
  16. 天涯社区离线阅读器(实现只看楼主功能)
  17. vue中使用微信聊天表情
  18. Cookie和Session的作用,区别和各自的应用范围,cookie、Session工作原理
  19. 【Livepano】VR全景嵌入人物视频详细教程
  20. 几个适合车载的ITX/MATX服务器主板信息总结

热门文章

  1. Guava学习笔记(四):复写的Object常用方法
  2. FusionCharts Free做报表
  3. 何川L3管理课_模块3_追进展(执行)
  4. OpenCV_Corner Detect with FastFeatureDetector(基于FAST的角点检测) 及 SUSAN算子
  5. opencv图像分析与处理(5)- 取样和取样函数的傅立叶变换
  6. ios::ate和ios::app在C++文件中的区别
  7. Js/jQuery实时监听input输入框值变化
  8. linux 设置时间
  9. 做某一项目常见知识点链接
  10. 【Python】Python简介