You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过gdb/lldb快速调试Android原生ART运行时模块?求更高效方案

更优的ART调试方案

1. 用Android Studio Native调试功能一键搞定

不用手动替换库、转发端口,Android Studio能自动处理调试符号和进程连接:

  • 确保AOSP构建时生成了带调试信息的ART库,模拟器使用自己编译的系统镜像
  • 打开目标应用项目(比如日历),进入Run > Edit Configurations,勾选对应应用配置的Debug native code
  • 在Debugger > Native里指定AOSP源码路径~/android/aosp/,启动调试后直接设置断点(比如JNI_CreateJavaVM)就能调试

2. 换用LLDB(Android官方推荐工具)

LLDB比GDB更适配Android生态,操作更顺畅:

  • 先按之前的步骤替换好带调试信息的libart
  • 端口转发后启动主机端LLDB:
    lldb
    platform select remote-android
    platform connect connect://localhost:2345
    target create --symbols ~/android/aosp/out/target/product/generic_x86_64/symbols/system/lib/libart.so /system/lib/libart.so
    breakpoint set -n JNI_CreateJavaVM
    process continue
    
  • 也可以直接用adb shell lldb-server启动调试服务,步骤更简化

3. 编译调试版系统镜像,省去重复替换libart

直接编译带调试信息的完整系统镜像,启动模拟器时自动加载调试版ART:

  • 在AOSP源码目录执行:
    make -j8 eng  # eng版本默认带全量调试信息,包含ART的符号表
    emulator -verbose -show-kernel  # 启动编译好的调试版模拟器
    
  • 后续调试不用再手动push替换libart,直接连接调试工具即可

4. 附加到已运行进程,不用重启应用

如果不想重启目标应用,可以直接附加到正在运行的进程:

  • 先获取进程PID:
    adb shell ps | grep com.android.calendar
    
  • 启动gdbserver附加到进程:
    adb forward tcp:2345 tcp:2345
    adb shell gdbserver :2345 --attach <进程PID>
    
  • 主机端连接后直接加载符号、设断点,省去重启应用的等待时间

5. 写GDB初始化脚本,减少重复输入

把常用的调试命令写到脚本里,启动GDB时自动执行:

  • 创建art_gdb_init.gdb文件:
    target remote :2345
    dir ~/android/aosp/
    b JNI_CreateJavaVM
    
  • 启动GDB时加载脚本:
    gdb -x art_gdb_init.gdb
    

内容的提问来源于stack exchange,提问作者Zu Zhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:55:22