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实战开发,请关注下面“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值