Debug Chromium in Android Studio#
0. Context#
1. debug#
Chromium Android源代码庞大且复杂。 在调试器LLDB下能帮助我们更好的理解代码流程。 介绍使用LLDB调试器调试android上chromium的C++代码。
1.1 编译Chromium时,记得修改编译选项:-g -O0, 使得编译器做更少的优化,便于调试。#
使用attach方式调试(因此进程在启动过程中暂时不能调试)。
- 查看进程PID:adb shell ps -A | grep chrome
- 启动lldb-server:adb shell /system/bin/lldb-server platform –server –listen unix-abstract:///data/local/tmp/debug.sock 确保手机目录/system/bin/存在lldb-server。lldb-server可以从Android SDK目录中找到。
1.2 安装LLDB。#
- apt install lldb
- 启动lldb: lldb
- 列出lldb支持平台:platform list
- 选择LLDB使用平台:platform select remote-android
- 连接lldb-server: platform connect unix-abstract-connect:///data/local/tmp/debug.sock
- 列举手机进程: platform process list
- ATTACH PID: attach 16767 #PID=16767 就是要调试的进程PID
- 查看: platform status
1.3 在LLDB中,设置源码路径:因为调试时源码路径与编译时源码路径可能不相同,因此需要设置。否则LLDB将无法设置断点和找到源代码。#
- settings set target.source-map /home/huangguanyuan/chromium_android/src /home/huangguanyuan/chromium_android/src
- settings show
- settings list
1.4 在LLDB中,加载符号表。#
- target symbols add /home/u1804/chromium_android/src/out/default64d/lib.unstripped/libnet.cr.so
- target symbols add /home/u1804/chromium_android/src/out/default64d/lib.unstripped/libchrome.cr.so
- target symbols add /home/u1804/chromium_android/src/out/default64d/lib.unstripped/libcontent.cr.so
- target symbols add /home/u1804/chromium_android/src/out/default64d/lib.unstripped/libbase.cr.so
1.5 在LLDB中,查找符号、设置断点、查看断点、启用/禁用断点、查看call stack、单步调试、查看变量。#
- 详细请参考:http://lldb.llvm.org/lldb-gdb.html
- image lookup –name TCPSocketPosix::ReadIfReady
- breakpoint set -f tcp_socket_posix.cc -l 413
- breakpoint disable 5
- breakpoint enable 5
- bt
- c
- n
- frame variable
1.6 安装lldb-server#
$ adb push lldb-server /data/local/tmp/
$ adb shell
$ cd /data/local/tmp
$ chmod 755 lldb-server
$ ./lldb-server p --server --listen unix-abstract:///data/local/tmp/debug.sock
$ lldb-<version>
$ platform list # 查看lldb可以连接的平台
$ platform select remote-android
$ platform status # 查看平台状态
$ platform connect unix-abstract-connect:///data/local/tmp/debug.sock
(lldb) file out/target/product/darwin/symbols/system/bin/logd # 指定将要调试的二进制文件,该文件需要是symbol文件。
(lldb) breakpoint set -f LogBuffer.cpp -l 710
(lldb) run
$ adb logcat -c
(lldb) file out/target/product/darwin/symbols/system/bin/logd # 指定将要调试的二进制文件,该文件需要是symbol文件。
(lldb) platform process list # 查看一直远端的进程, 找到目标进程pid, 或者名称
(lldb) attach 9053
b = breakpoint 设置断点
c = continue 继续运行
n = next 下一行
s = step 单步进入
f = finish 跳出
p [var] 打印变量值
var 显示所有局部变量
bt 打印调用栈
up 在调用栈中向上移一帧 older
down 在调用栈中下移一帧 newer
register 查看寄存器 memory 查看内存