首页
社区
课程
招聘
[原创]Android - 系统级源码调试
发表于: 2022-9-14 10:48 12146

[原创]Android - 系统级源码调试

2022-9-14 10:48
12146

sudo deepin-editor android.iml

image

image

image

image

image

image

在源码的根目录创建start_emulator.sh脚本,为了方便的启动模拟器,输入以下内容 后执行

在系统源码找到ActivityStarter这个类,在startActivityMayWait这个方法打断点

image

点击菜单的Run–>Attach Debugger to Android Process,勾选Show all processer,选择system_process 随便启动app 触发断点

image

image

image

image

image

gdbclient.py -p 6018 --setup-forwarding vscode 执行之后 vscode 附加 发现链接失败时

# 在源码根目录执行
source build/envsetup.sh
lunch 22
mmm development/tools/idegen
# or make idegen
sudo development/tools/idegen/idegen.sh
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
# 在源码根目录执行
source build/envsetup.sh
lunch 22
mmm development/tools/idegen
# or make idegen
sudo development/tools/idegen/idegen.sh
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />
代号 版本 API 级别/NDK 版本
Android13 13 API 级别 33
Android12L 12 API 级别 32
Android12 12 API 级别 31
Android11 11 API 级别 30
Android10 10 API 级别 29
Pie 9 API 级别 28
Oreo 8.1.0 API 级别 27
Oreo 8.0.0 API 级别 26
Nougat 7.1 API 级别 25
Nougat 7.0 API 级别 24
Marshmallow 6.0 API 级别 23
/android/android/android-10.0.0_r2/frameworks/base/core/res/AndroidManifest.xml
/android/android/android-10.0.0_r2/frameworks/base/core/res/res
/android/android/android-10.0.0_r2/frameworks/base/core/res/assets
/android/android/android-10.0.0_r2/frameworks/base/core/res/AndroidManifest.xml
/android/android/android-10.0.0_r2/frameworks/base/core/res/res
/android/android/android-10.0.0_r2/frameworks/base/core/res/assets
#!/bin/bash
source build/envsetup.sh
lunch 6
emulator
# sudo chmod 777 ./start_emulator.sh
# ./start_emulator.sh
#!/bin/bash
source build/envsetup.sh
lunch 6
emulator
# sudo chmod 777 ./start_emulator.sh
# ./start_emulator.sh
# 第三方app需先以调试模式启动app 点击运行
adb shell am set-debug-app -w com.example.dexlassloaders
# 等待附加调试 会自动继续运行 直到触发断点
 
# 系统进程可直接进行附加调试
# 第三方app需先以调试模式启动app 点击运行
adb shell am set-debug-app -w com.example.dexlassloaders
# 等待附加调试 会自动继续运行 直到触发断点
 
# 系统进程可直接进行附加调试
 
 
 
# 进入源码目录
cd /android/android/android-10.0.0_r2
# 先初始化环境 主要为lunch 目标
source build/envsetup.sh
lunch 22
# 进入gdbclient.py 脚本目录
cd development/scripts
# 调试模式启动 第三方app 此命令需手动点击
adb shell am set-debug-app -w com.example.dexlassloaders
# 以调试模式启动 无需手动点击
adb shell am start -D -n  com.example.dexlassloaders/.MainActivity
# 查看进程pid
adb shell "ps -ef | grep com.example.dexlassloaders"
# u0_a103       6018  1631 0 18:24:11 ?     00:00:00 com.example.dexlassloaders
# root          6046  1677 0 18:25:54 ?     00:00:00 sh -c ps -ef | grep com.example.dexlassloaders
# root          6049  6046 0 18:25:54 ?     00:00:00 grep com.example.dexlassloaders
# 执行此命令等待 输出 vscode launch.json配置 报错 请检查pid
gdbclient.py -p 6018 --setup-forwarding vscode
# 没调试完不要 按enter
# 接着使用as 附加调试 或者
adb forward tcp:12345 jdwp:6018  # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
# 进入源码目录
cd /android/android/android-10.0.0_r2
# 先初始化环境 主要为lunch 目标
source build/envsetup.sh
lunch 22
# 进入gdbclient.py 脚本目录
cd development/scripts
# 调试模式启动 第三方app 此命令需手动点击
adb shell am set-debug-app -w com.example.dexlassloaders
# 以调试模式启动 无需手动点击
adb shell am start -D -n  com.example.dexlassloaders/.MainActivity
# 查看进程pid
adb shell "ps -ef | grep com.example.dexlassloaders"
# u0_a103       6018  1631 0 18:24:11 ?     00:00:00 com.example.dexlassloaders
# root          6046  1677 0 18:25:54 ?     00:00:00 sh -c ps -ef | grep com.example.dexlassloaders
# root          6049  6046 0 18:25:54 ?     00:00:00 grep com.example.dexlassloaders
# 执行此命令等待 输出 vscode launch.json配置 报错 请检查pid
gdbclient.py -p 6018 --setup-forwarding vscode
# 没调试完不要 按enter
# 接着使用as 附加调试 或者
adb forward tcp:12345 jdwp:6018  # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
{
    "configurations": [
         // {} 复制到这里
{
    "miDebuggerPath": "/android/android/android-10.0.0_r2/prebuilts/gdb/linux-x86/bin/gdb",
    "program": "/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/bin/app_process64",
    "setupCommands": [
        {
            "text": "-enable-pretty-printing",
            "description": "Enable pretty-printing for gdb",
            "ignoreFailures": true
        },
        {
            "text": "-environment-directory /android/android/android-10.0.0_r2",
            "description": "gdb command: dir",
            "ignoreFailures": false
        },
        {
            "text": "-gdb-set solib-search-path /android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/hw:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/ssl/engines:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/drm:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/egl:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/lib64/soundfx:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/vendor/lib64/:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/vendor/lib64/hw:/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/vendor/lib64/egl",
            "description": "gdb command: set solib-search-path",
            "ignoreFailures": false
        },
        {
            "text": "-gdb-set solib-absolute-prefix /android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols",
            "description": "gdb command: set solib-absolute-prefix",
            "ignoreFailures": false
        },
        {
            "text": "-interpreter-exec console \"source /android/android/android-10.0.0_r2/development/scripts/gdb/dalvik.gdb\"",
            "description": "gdb command: source art commands",
            "ignoreFailures": false
        }
    ],
    "name": "(gdbclient.py) Attach app_process64 (port: 5039)",
    "miDebuggerServerAddress": "localhost:5039",
    "request": "launch",
    "type": "cppdbg",
    "cwd": "/android/android/android-10.0.0_r2",
    "MIMode": "gdb"
}
    ]
}
{
    "configurations": [
         // {} 复制到这里
{
    "miDebuggerPath": "/android/android/android-10.0.0_r2/prebuilts/gdb/linux-x86/bin/gdb",
    "program": "/android/android/android-10.0.0_r2/out/target/product/generic_x86_64/symbols/system/bin/app_process64",
    "setupCommands": [
        {
            "text": "-enable-pretty-printing",
            "description": "Enable pretty-printing for gdb",
            "ignoreFailures": true
        },
        {
            "text": "-environment-directory /android/android/android-10.0.0_r2",
            "description": "gdb command: dir",
            "ignoreFailures": false

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-11-21 22:38 被iyue_t编辑 ,原因: 板块不对
收藏
免费 16
支持
分享
最新回复 (8)
雪    币: 1993
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2022-9-14 11:15
0
雪    币: 4614
活跃值: (6867)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

太棒了,等源码调试的文章很久了,最好再来个源码下载。

最后于 2022-9-14 14:44 被huangjw编辑 ,原因:
2022-9-14 14:42
0
雪    币: 1624
活跃值: (3463)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
下载直接看清华源aosp帮助里面就行了.
2022-9-14 15:20
0
雪    币: 1624
活跃值: (3463)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
huangjw 太棒了,等源码调试的文章很久了,最好再来个源码下载。
https://bbs.pediy.com/thread-274882.htm 我把笔记整理了一下 要是看了还不会 我远程手把手教.
2022-10-26 19:24
0
雪    币: 200
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
老哥,可以加个wx(hslxy417)交流一下吗,native的debug没有成功
2023-4-15 17:32
0
雪    币: 3672
活跃值: (31051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2023-4-15 22:38
1
雪    币: 27
活跃值: (622)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
感谢分享,请问实机也是这个流程吗
2023-4-22 20:09
0
雪    币: 1624
活跃值: (3463)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
Concord 感谢分享,请问实机也是这个流程吗
对的,把模拟器生成的vscode路径改成真机的就行,其实改动很小
2023-4-24 02:02
0
游客
登录 | 注册 方可回帖
返回
//