美文网首页
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