aosp15 VSCode调试 native程序完整笔记

AOSP内置搜狗输入并设置默认输入法 问题出在handheld_handle.mk中,#LatinIME \ 引起的错误,解决方法是把LatinIME \删掉。既然我们把搜狗输入法内置进去了,那么LatinIME就没有存在的必要了,删除的话需要找到使用LatinIME的地方。刚刚我们在/packages/inputmethods文件夹下的LatinIME就是系统默认的输入法。接着打开文件/build/make/target/product/aosp_product.mk。搜狗输入法的apk重命名为SougouInput.apk。 阅读详情
AI摘要

本文详细介绍了在AOSP15环境下使用VSCode配合LLDB调试Native(C/C++)代码的完整流程,涵盖环境准备(AOSP15编译完成、VSCode及LLDB插件安装、Python 3.10+要求)、lldbclient.py启动与端口转发配置、launch.json调试配置生成、断点设置与调试启动等关键步骤,并提示常见错误(如连接中断)及临时解决方案(重启模拟器或adb),聚焦于提升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实战开发,请关注下面“千里马学框架”

【AOSP】手把手教你编译和调试AOSP源码 源码同步完成后,即可进行第二步以后的操作。后,我们需要在虚拟机上手动打开系统设置,然后就可以进行调试了。在开始之前,我们先安装编译AOSP需要的一些系统基本依赖,如下命令。(2)打开左侧的Project,配置SDK,选择刚才添加的SDK。假设电脑已经包含了git工具,接下来需要同步源代码,命令如下。回到代码主编辑器窗口后,首先找到关键的代码打断点,然后点击。按钮连接到模拟器,就可以看到代码的调试效果了。有一定的了解,但还没有真正实践,这篇文章很适合你。的简称,谷歌官方提供了该工具,可以方便的进行基于。 阅读详情

相关推荐

aosp源码查看工具对比(最终选择Android studio)

所以我这边只能把它当做Android源码阅读和代码修改使用。这样我们的Android studio asop源码开发环境就搭建好了,跟source insight和vscode相比较,源码文件搜索很快,函数实现跳转很智能化,最重要的是在自己添加代码时候,提示功能很好,提高代码编写效率。源码比较少的可以使用它。优点:软件小,只有20M左右,而且可以查看所有的语言源码,包含吃吃c++、java、cust等,在使用source insight 新建工程,然后导入源码,导入时候,最好只选择你感兴趣的源码,例如。

uestczhangyao的专栏 2928

Android 代码阅读环境搭建:VSCODE + SSH + CLANGD(详细版)

在阅读Android源码(AOSP超过1亿行代码)时,开发者常面临索引失败、跳转卡顿等问题。本教程将手把手教你搭建基于VSCode + SSH + Clangd的终极阅读环境,实现秒级符号跳转、精准代码提示和高效远程开发。

byte轻骑兵的技术小窝 2万+

导入小部分aosp源码,在Android studio调试

这部分,不过多介绍。网上很多。 source build/envsetup.sh -> lunch xxx -> make idegen source -> development/tools/idegen/idegen.sh大部分人代码都在远程服务器,在本地也可以 在本地新建一个文件夹 将需要的代码拷入 ,例如我的是, 注意:并不是将frameworks packages中的代码全部拷入,而是只拷贝需要的部分 拷入的代码结构需保持一致, 我只拷贝了 frameworks\opt\telephony

qq_41285455的博客 2037

VS Code 打开Android AOSP源码进行Java代码的跳转

新建code-workspace工作区文件针对每个folders,新建.project、.classpath文件需要引用另一个folders的项目,需要在.classpath里加入到src中通过VS code 打开aosp.code-workspace工作区,等待(Language Support for Java™ by Red Hat)插件进行检索工作(可能需要手动打开项目中的一个Java文件,才会自动工作)。

gso的博客 1797

VsCode调试aosp源码

下面简单介绍下vscode环境搭建点击官方地址,点击Download for Windows下载下载完后,双击打开安装安装流程这里不再赘述。

Red风信子的博客 1367

f_fs.c 初始化流程(进行中)

前言 之所以选择f_fs.c作为这系列的开始,因为usb在/driver/usb下面的内容实在太多太多,如果讲各种各样点会太分散了。所以决定切入点以实际使用为主,就是f_fs了,目前我了解这是做bulk裸传输使用的,具体的通信协议自己确定。 初始化部分 开始点从这个路径下说起, /drivers/usb/gadget/function/f_fs.c 然后f_fs.c第一个使用的是include/composite.h中的宏定义function #define DECLARE_USB_FUNCTION(_n

weixin_36406973的博客 1967

Android系统源码_AOSP开发(三)AndroidStudio导入AOSP并开启调试

介绍AndroidStudio如何导入AOSP源码并保证方法可以正常点击跳转

AfinalStone的专栏 3095

安装esxi7.0

保存重启后就能安装。vCenter Server是VMware vSphere虚拟化架构中的核心管理工具,充当ESXi主机及虚拟机中心管理点的服务,利用vCenter Server,可以集中管理多ESXi主机及其虚拟机,安装、配置和管理vCenter Server 不当可能会导致管理效率降低,或者致使EXSi主机和虚拟机停用。提示选择安装VMware ESXi 使用的存储,ESXi支持U盘以及SD卡安装,如系统中存在多块存储设备,选择需要安装系统的磁盘【注意磁盘142G,ESXI会将120G做VMFSL】

u011220233的博客 1万+

安卓15 audio新专题发布:安卓系统手机车机音频audio子系统深入实战开发专题

从简单的基础专题开始学习,以最熟悉的声音播放为主线对整个涉及的音频框架系统进行挨个模块剖析,这里面涉及App层面,AudioFlinger,AudioPolicy等模块,都会带你进行详细剖析,而且还对较难的音频hal部分也进行了深入讲解,同时也会讲解音频实战开发中,经常使用的dumpsys命令及命令输出相关源码及代表意义。3、公司级别的项目实战为主导,让你学习的音频系统的源码分析理论知识可以直接用于实现公司级别的项目需求,真实带你手把手实现项目需求,包括方案预言,调研其他厂商,方案设计,代码实现等。

learnframework的博客 1661

使用moveit控制机械臂

位置设置:`target_pose.position.x = 0.12`, `target_pose.position.y = 0.41`, 和 `target_pose.position.z = 0.44` 分别设置了机械臂末端执行器的X, Y, 和 Z坐标。设定目标位置:`group.set_pose_target(target_pose)` 这一命令将之前定义的目标位置和姿态设置为当前机械臂组的目标,为接下来的路径规划做准备。在机械臂控制的过程中,设定精确的目标位置和姿态是实现精确操作的关键步骤。

realman_Rop的博客 3687

eNSP中玩转Python自动化——解锁网工新姿势(一)

Python自动化一、安装Paramiko模块二、搭建实验环境1、桥接电脑网卡2、配置交换机IP地址交换机配置测试ensp的交换机与电脑的连通性:交换机配置SSHXshell验证三、Python脚本1、执行python脚本2、同步成功 一、安装Paramiko模块 首先安装Python3 然后安装pip解释器 最后安装Paramiko模块 Windows+R打开Cmd,输入命令: pip3 install paramiko 进入python,导入 paramiko模块: import paramiko

LiBai'S BLOG 2万+

Android源码学习快捷手册

《Android源码学习快捷手册》摘要:本文提供了Android源码学习与调试的实用指南,包含6个核心操作模块:1) 源码编译与环境启动流程;2) 将源码导入AndroidStudio的方法;3) 通过logcat进行日志调试;4) Ubuntu下启动AndroidStudio;5) 查看设备进程及对应日志;6) Ubuntu磁盘空间扩展方案。重点介绍了make编译、idegen工具使用、adb调试命令等关键操作,并包含常见问题解决方法(如跳过jackserver错误、权限报错处理等)。全文采用命令行操作方

qq_52272419的博客 568

PCL 均匀采样【2026最新版】

根据输入点云数据创建一个微小的三维立方体集合,然后计算每个三维立方体的重心;由于该重心点不一定是原始点云中的点,直接用该点来表示立方体内所有的点会丢失原始点云的细小特征;所以使用k最近邻搜索寻找距离重心点最近的原始点来代替重心点。

点云侠的博客 41万+

Android Studio关联源码总跳转失败?手把手教你配置本地完整源码环境(含JNI/AIDL文件)

本文详细指导如何在Android Studio中配置本地完整源码环境,解决JNI/AIDL文件跳转失败问题。从硬件要求、源码同步到IDE集成,提供全链路解决方案,帮助开发者高效调试Android系统源码,提升开发效率。

weixin_28717431的博客 249

Test软件:Keysight二次开发_(3).安装与配置开发环境

在开始进行Keysight软件的二次开发之前,首先需要确保您的开发环境已经正确安装和配置。本节将详细介绍如何安装和配置必要的开发工具和依赖项,以便您能够顺利进行开发工作。

2401_87715305的博客 1413

UEFI 基础教程 (零) - 目录

UEFI 基础教程 (十八) — UEFI Build Process简单分析。UEFI 基础教程 (十五) — 获取UEFI MemoryMap。UEFI 基础教程 (六)   —  PROTOCOL 简单使用。UEFI 基础教程 (十)   —  FileIO 简单使用。UEFI 基础教程 (一)   —  搭建UEFI开发环境。UEFI 基础教程 (九)   —  EVENT 简单使用。UEFI 基础教程 (七)   —  HOB 简单使用。UEFI 基础教程 (八)   —  PCD 简单使用。..

技术联盟 1537

速通AOSP,成功编译调试Android源码

/ 今日科技快讯 /近日据不少网友反馈,爱奇艺App开始对投屏功能作出限制,之前黄金VIP会员支持最高4K清晰度投屏,现在只能选最低的480P清晰度,要想进行4K投屏必须购买白金VIP会员。不少网友表示,480P清晰度太低,几乎无法观看。/ 作者简介 /大家好,今天是年前的最后一篇文章,下周我就要休假回家过年了,公众号也会暂时停更。这里提前祝大家新年快乐,我们年后再见。本篇文章转自...

郭霖 3613

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

建议立刻将 WSL + VSCode 作为你的最强生产力环境,起飞吧

不解释,不上车是你自己吃亏了。

工匠若水 6万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Ubuntu 下利用 LLDB 调试 AOSP 源码

Ubuntu 下利用 LLDB 调试 AOSP 源码

MrMorningStar的博客 1299

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

aosp下载、编译、刷机和单编framework(android 12)

aosp源码下载,编译,刷机以及单编framework

Tank_Mao的博客 1万+

Android Native cpp源码调试总结

Android Native 源码调试

guohuaqu的博客 1027

vscode 中实现代码跳转功能

做c开发的程序员肯定被vscode函数跳转困扰,微软自带插件可以实现函数跳转,在十几个文件的小工程中还是挺好用,一旦文件数量有几百个几千个的时候,自带跳转功能就有点捉襟见肘了。C/C++ IntelliSense插件有一下几个缺点:1、只能适用小工程2、调转速度非常慢,一直在检索3、占用内存很大,内存莫名其妙被吃掉了4、占用大量的c盘空间以上几个问题,没有遇到说明工程很小,一旦工程数量变多,上面几个问题就会凸显。如何解决这些问题?

蓝的博客 7125

Windows平台VSCode搭建安卓native C++可视化调试环境

准备: 1.C/C++ extension 2. andorid ndk 主要步骤: 1.VSCode 安装C/C++ extension 在VS CODE插件市场中查找并安装 2. 下载android ndk或者直接在Android Studio中下载,在其中中找到gdbserver 将gdbserver push到目标设备中 adb push ./Android/Sdk/ndk/21.1.6352462/prebuilt/android-arm64/gdbserv...

风出闹闹的博客 3095

用AS看AOSP的debug调试和trace查耗时实战

记录工作中用到的源码调试实战方法。

qq_32670947的博客 722
上一篇: 重学perfetto官方高级抓取方案-抓取更多的内容
下一篇: 如何智能识别系统性能抓取对应perfetto trace然后方便分析trace-有源码的简单方案
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值