美文网首页
android studio 调试经验

android studio 调试经验

作者: 该用户已趴倒 | 来源:发表于2020-03-19 18:27 被阅读0次

放在 jniLibs 里面的带调试符号的第三方库,在用AS调试应用,或者打debug包的时候,默认也会被去除调试符号,导致无法调试

可以在项目级别的 build.gradle 中的 android.buildTypes.debug 中添加

packagingOptions {
    doNotStrip "**/*.so"
}

这样调试的时候,动态库就会带有调试符号。

使用 adb 或者 lldb 远程调试的时候有多个设备怎么选择

对于adb有两种方法:

  1. 使用 adb -s <serial_num> 来指定。serial_num 可以通过 adb devices 来获取
  2. 定义 ANDROID_SERIAL 环境变量。adb 会使用这个变量,优先链接

对应 lldb 只能通过定义 ANDROID_SERIAL 环境变量这种方式来指定目标设备

使用lldb 调试原生第三方库

  • 保证应用加载的库确实有调试符号
  • 在AS 中仅仅使用java 调试器,在调用c++代码前加上断点这样保证等待lldb 连接
  • 运行 lldb server
adb shell
run-as <你的应用包名>
lldb/bin/lldb-server platform --server --listen unix-abstract:///data/local/tmp/debug.sock # socket 地址可以自定
  • 在本机上使用 lldb
    如果你有多个安卓设备保证 ANDROID_SERIAL 环境变量已经定义
lldb
platform set remote-android
platform connect unix-abstract-remote:///data/local/tmp/debu.sock
platform process list
# 查看输出里面的名字为app_process的pid
process attach -p <pid>
b <function_name> # 测试添加一个函数断点。这个断点当前无效,但是一会设置了源码路径会自动生效
setttings set target.source-map <so中源码的路径> <映射到本机文件的路径>

此时你在AS中恢复程序运行,程序就会在需要调用那个函数前被lldb捕获阻塞住
在lldb中你使用 continue 指令就可以开始调试了

相关文章

网友评论

      本文标题:android studio 调试经验

      本文链接:https://www.haomeiwen.com/subject/sgolyhtx.html