在C/C++跨平台开发中,我们知道在Windows上可以通过VS,进行单步断点调试,这非常方便。但是我们如果编译好的动态库so,想要跟踪下其流程及各个阶段,如,怎么跟踪FFmpeg/VLC等库内部demux流程,或是Codec流程呢?今天通过一个小Demo进行Debug库文件C/C++代码。
一,下载 NDK 和构建工具 要编译和调试本地代码(native code),你需要下面的组件:
注意:要在 Android Studio 中 使用 CMake 或者 ndk-build,你需要使用 Android Studio 2.2 或更高的版本,同时需要 配合使用 Android Plugin for Gradle 2.2.0 及以上的版本。
安装上述组件:
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++库
如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。
说明:
1、只需配置android标签节点下的buildTypes
- buildTypes{
- debug{
- jniDebuggable true
- jniDebuggable = 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
断点调试运行
图1
图2
图1,图2是两种进行运行app-native的方式,选择app-native后,debug->app-native; 接下来就可以在C/C++文件中进行单步调试了。
这里暂留一个问题,如果是已经编译好的带符号表的动态库.so文件,如何进行调试呢?有兴趣读者可以留言交流下。
来源: https://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247485454&idx=1&sn=584c28f5123a4c62d32d3c19d08d1d0b&chksm=eae1fd5cdd96744aea8bce2622739ccc9842dcaccb082b8d8f0e137a04cac16077226ae8e96c#rd