1. clion vscode 阅读Android native源码
1.1. 为native源码编译生成cmake文件
1 | export SOONG_GEN_CMAKEFILES=1 |
将上面两句加入到~/.bashrc下, 以后新工程就不用重复export了
源码source lunch后, 直接make随便一个module即可.
cmake文件会生成在源码根目录的out/development/ide/clion下
1.2. 使用clion导入native工程
可以直接看单module,
file->new cmake project from sources
但多个module 需要手动写cmake 引进子的module, 重复工作量大, 而且soong生成的cmake 同一module包含多个子目标
1 | drwxrwxr-x 2 mi mi 4096 3月 13 20:51 librecovery-arm64-android |
手动添加工作量比较大, 而且是重复工作
这边提供一个脚本
比如我想看 miui-q-cepheus-dev
分支的 bootable/recovery
/ system/vold
等的源码, 可以这样写
- 第一个参数: 建立的工程目录
- 第二个参数: 哪套源码的
- 第…个参数: 想看的子目录的源码
1 | find_and_add_cmake2.py cepheus-q-recovery miui-q-cepheus-dev bootable/recovery system/vold bionic/libc system/core/base system/core/fs_mgr system/core/crypto_test system/security/keystore system/gatekeeper system/core/libcutils system/core/init frameworks/base/media/jni |
规则是 第一个参数: 工程目录位于~/program/cmake_work_space下, 建新的工程都会在该目录下创建工程的根目录
第二个参数, 源码的根目录在 ~/work_space下, 这些文件夹可以自己修改脚本指定
1.3. clion导入工程
上面建的工程位于~/program/cmake_work_space下, clion 菜单 File->new cmake project from sources, 点击之前通过脚本建立的CMakeLists.txt文件导入, 点击Open Existing Project
即可, 等待symbol加载完成.
2. clion gdb remote debug native源码
2.1.1. 手机端设置gdbserver
1 | 进程已经启动的情况下 |
pc 端
1 | adb forward tcp:8888 tcp:8888 |
2.1.2. clion 端配置
参考下图
Run->Edit Configurations
- Templates
注意上面的几个参数都要配置正确
- gdb: 源码下的prebuilts/gdb/linux-x86/bin/gdb
- target remote args tcp:127.0.0.1:8888
- path mappings: 注意映射完整路径
3. vscode gdb remote debug
将prebuilts/gdb/linux-x86/bin/gdb 和 gdb orig 链接到环境变量下的系统目录中,或者单独加入到环境变量下
1 | { |
gdb init
1 | define target hookpost-remote |
stl 支持
默认情况下不支持stl 输出, 需要gdb支持python脚本, 一般需要自己编译.
另外需要定制gdbinit, android上废弃了stlport和gnustl的支持, 只支持libc++的方式集成stl.
所以python解析脚本是基于libc++开发的, 这里提供一下github上的一个脚本
https://github.com/koutheir/libcxx-pretty-printers
同时, vscode的launch.json也要配置打开 pretty-printers
1 | { |