Android 11(AOSP)系统应用调试报错:gdbclient.py执行失败求助
解决Android 11 AOSP模拟器调试gdbclient.py的UnicodeDecodeError问题
错误原因分析
- 符号文件缺失警告:脚本在
symbols目录找不到未剥离符号的可执行文件,会导致调试时无法查看完整符号信息。 - Unicode解码错误:
gdbrunner模块读取二进制可执行文件时用了文本模式(默认utf-8解码),但二进制文件包含非utf-8字节,触发解码失败。
解决步骤
1. 确保生成并找到正确的符号文件
- 编译AOSP或目标应用时,确保生成符号文件:
# 全量编译时保留符号 make -j$(nproc) # 或单独编译目标应用 cd path/to/your/app mm -j$(nproc) - 检查符号文件路径:确认
/home/asabbagh/android11-release/out/target/product/generic_x86_64/symbols下存在目标应用的可执行文件,比如/system/app/YourAppName/YourAppName。
2. 修复gdbrunner的文件读取模式
打开/home/asabbagh/android11-release/development/python-packages/gdbrunner/__init__.py,找到get_binary_arch函数中打开文件的代码:
# 原代码(类似) binary_file = open(binary_path, 'r')
修改为二进制模式打开:
binary_file = open(binary_path, 'rb')
保存后重新执行gdbclient.py。
3. 手动指定可执行文件路径
如果脚本自动查找符号文件失败,直接在命令中指定本地未剥离的可执行文件:
gdbclient.py -e /home/asabbagh/android11-release/out/target/product/generic_x86_64/symbols/system/app/YourAppName/YourAppName -p 7984
4. 验证主机与模拟器的通信连接
- 先确认adb连接正常:
adb devices - 手动建立gdbserver连接,排除脚本问题:
# 模拟器端启动gdbserver adb shell gdbserver :5039 --attach 7984 # 主机端用gdb连接 gdb -ex "target remote localhost:5039"
如果手动连接成功,说明通信无问题,问题出在脚本本身的符号查找或文件读取逻辑。
内容的提问来源于stack exchange,提问作者Anthony Sabbagh
相关产品推荐
相关产品推荐

