aosp15 VSCode调试 native程序完整笔记

背景:

经常做aosp开发时候,主要分为2部分代码:
java部分代码 ----> 使用Android Studio进行查看

c++/c部分代码 ---->使用VSCode进行代码查看

对于代码调试,原来也只实战讲解过Java代码在Android Studio进行Debug,虽然Debug不适用于所有场景,但是在分析源码堆栈,调用关系时候还是非常有作用,所以学员朋友们也一直希望native 代码也有很方便的调试Debug方法,可以看到native代码的调用堆栈,这样也可以大大提高native代码的分析效率。
在克服各种困难验证后,马哥这边给大家验证了一种比较方便的VSCode的调试方法。

(ps:为啥没有用 Android Studio for Platform工具,主要还是稳定性,它很容易卡死,加载太慢,因为要加载东西太多)

前置工作:

条件1:
需要有aosp15源码环境,并且已经编译成功

条件2:
需要有VSCode,并且要安装好两个插件
看代码插件
LLDB调试插件
在这里插入图片描述条件3:
aosp15代码的话,确定自己安装了python3.10+环境

比如python3.8环境,则会报错
TypeError: unsupported operand type(s) for |: ‘type’ and ‘NoneType’


aosp15$ lldbclient.py -p $(adb shell pidof audioserver) --setup-forwarding vscode-lldb
Traceback (most recent call last):
  File "aosp15/development/scripts/lldbclient.py", line 50, in <module>
    def get_lldb_path(toolchain_path: str) -> str | None:
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'

至于python3.10安装方法如下:
从源码编译安装(适用于自定义配置)‌
安装编译依赖‌

sudo apt install build-essential libssl-dev libffi-dev zlib1g-dev libbz2-dev libsqlite3-dev  # 基础编译工具链 ‌

下载并解压源码包‌

wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz  # 下载指定版本源码 ‌
tar -xvf Python-3.10.0.tgz  # 解压源码包 ‌
cd Python-3.10.0

编译与安装‌

./configure --enable-optimizations 
make -j$(nproc)  # 多线程编译加速 ‌
sudo make install  # 安装到系统目录

链接系统python3到python3.10
修改前,发现python3链接是python3.8

/usr/bin$ ls -l | grep python3
lrwxrwxrwx 1 root root            23 Mar 19 04:04 pdb3.8 -> ../lib/python3.8/pdb.py
lrwxrwxrwx 1 root root            31 Jun  4  2022 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root             9 Apr 16 15:19 python3 -> python3.8
-rwxr-xr-x 1 root root       5490456 Mar 19 04:04 python3.8
lrwxrwxrwx 1 root root            33 Mar 19 04:04 python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root            16 Mar 13  2020 python3-config -> python3.8-config
-rwxr-xr-x 1 root root           384 Jan 25  2023 python3-futurize
-rwxr-xr-x 1 root root           388 Jan 25  2023 python3-pasteurize
-rwxr-xr-x 1 root root          3241 Mar 19 04:04 x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root            33 Mar 13  2020 x86_64-linux-gnu-python3-config -> x86_64-linux-gnu-python3.8-config

删除原python3的链接,链接到python3.10

test@test:/usr/bin$ sudo rm python3
test@test:/usr/bin$ sudo ln -s ../local/bin/python3.10 python3

然后确认一下版本

test@test:/usr/bin$ python3 --version
Python 3.10.11

如果不想升级高版本python,那么可以考虑拷贝老版本aosp14的lldbclient.py 覆盖aosp15的

正式开始调试:

第一步:进行源码环境的env操作

source build/envsetup.sh;lunch sdk_phone64_x86_64-trunk_staging-eng

第二步:启动lldbclient.py部分

命令格式:
lldbclient.py -p 进程pid号 --setup-forwarding vscode-lldb
audioserver为案例:

aosp15$ lldbclient.py -p $(adb shell pidof audioserver) --setup-forwarding vscode-lldb
Connecting to tracing pid 3124 using local port 5039

{
    "name": "(lldbclient.py) Attach audioserver (port: 5039)",
    "type": "lldb",
    "request": "custom",
    "relativePathBase": "/media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15",
    "sourceMap": {
        "/b/f/w": "/media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15",
        "": "/media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15",
        ".": "/media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15"
    },
    "initCommands": [
        "settings append target.exec-search-paths /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/ /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/hw /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/ssl/engines /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/drm /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/egl /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/lib64/soundfx /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/vendor/lib64/ /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/vendor/lib64/hw /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/vendor/lib64/egl /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/apex/com.android.runtime/bin"
    ],
    "targetCreateCommands": [
        "target create /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/system/bin/audioserver",
        "target modules search-paths add / /media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/out/target/product/emu64x/symbols/"
    ],
    "processCreateCommands": [
        "gdb-remote 5039"
    ]
}


Paste the above json into .vscode/launch.json and start the debugger as
normal.

Press enter in this terminal once debugging is finished to shut lldb-server
down and close all the ports.

Press enter to shut down lldb-server


这里的输出内容很重要,会为下面VSCode填写提供依据,大家注意这里最后有一个提示
Press enter to shut down lldb-server
大家切勿点击enter键,除非想要停止调试

第三步VSCode部分

点击VSCode的Run --> Add Configuration
在这里插入图片描述把第二步lldbclient.py执行输出的内容,拷贝到这个lunch.json文件的configurations中
在这里插入图片描述

第四步设置断点进行调试

对自己感兴趣代码进行断点设置
*在这里插入图片描述然后可以点击开始调试,或者按F5
在这里插入图片描述出现如下导航栏就代表可以:
在这里插入图片描述还会有相关终端调试日志的打印:
在这里插入图片描述
注意这里如果有啥报错也会打印出来

在这里插入图片描述
在这里插入图片描述
对应变量查看在这里插入图片描述

注意:
在开启调试过程中发现偶尔会出现如下报错

error: Connection shut down by remote side while waiting for reply to initial handshake packet
这个报错暂时也没深入查找原因,重启模拟器设备后,重新调试就好了,大家也可以尝试重启adb reboot既可以解决

更多framework实战开发,请关注下面“千里马学框架”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值