Android 断点调试 webrtc、medieasoup

Android 断点调试 webrtc、medieasoup

本文首发地址 https://blog.csdn.net/CSqingchen/article/details/120156900
最新更新地址 https://gitee.com/chenjim/chenjimblog
本文基于 mediasoup-demo-androidmediasoup-client-android 或者 webrtc AppRTCDemo

调试代码工程准备

  • mediasoup-demo-android mediasoup-client-android git clone 到一个目录
  • 修改 app/build.gradle, 去掉 implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'org.mediasoup.droid:mediasoup-client:3.0.8-beta-3' 改为
      if (client_project_build.toBoolean()) {
          implementation project(':media_client')
      } else {
          implementation 'org.mediasoup.droid:mediasoup-client:3.0.8-beta-3'
      }
    
  • gradle.properties 中添加 client_project_build=true
    控制使用源码编译,还是直接用编译好的 aar
  • settings.gradle 修改结果如下
include ':app'

if (client_project_build.toBoolean()) {
    include ':media_client'
    project(":media_client").projectDir = new File(rootDir, "../mediasoup-client-android/mediasoup-client")
}

编译 Debug 包

修改 ./build/toolchain/android/BUILD.gn

  ...
template("android_clang_toolchain") {
  ...
  _prefix = rebase_path("$clang_base_path/bin", root_build_dir)
  cc = "$_prefix/clang"
  cxx = "$_prefix/clang++"
  ar = "$_prefix/llvm-ar"
  ld = cxx
  readelf = _tool_prefix + "readelf"
  nm = _tool_prefix + "nm"
  # 注释掉下面三行配置,即可实现 unstrip
  # strip = rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",
  #                     root_build_dir)
  # use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs
  ...
}
...

添加编译参数

关键参数为 is_debug=true symbol_level=2 android_full_debug=true

$ ./tools_webrtc/android/build_aar.py \
  --extra-gn-args "is_debug=true symbol_level=2 android_full_debug=true" \
  --arch arm64-v8a

我们可以用 Linux 命令 cp 将编译结果复制到我们需要用的地方


安卓应用中修改 app/build.gradle

如下

...
android {
  buildTypes {
    debug {
      debuggable true     // 必须设置为 true
      jniDebuggable true  // 必须设置为 true
      minifyEnabled false // 必须设置为 false
    }
  }
  packagingOptions {
    ...
    // 如果不设置 doNotStrip,编译出来的安装包还是会丢失调试信息;
    // 因为我们只编译了 arm64-v8a 架构的包,所以只需要配置这一行即可
    doNotStrip "*/arm64-v8a/*.so"
  }
}
...

设置DEBUG TYPE



设置源码映射

# https://stackoverflow.com/a/53065726/4696820
# 查看 Native 层 webrtc::PeerConnection::RestartIce 这个方法的调试信息;
# 这里选用 RestartIce 而不是 CreateOffer 作为示例的原因是其输出单一,易于阅读
(lldb) image lookup -vrn webrtc::PeerConnection::RestartIce

# 设置源码映射,注意替换为自己的路径
(lldb) settings set target.source-map ../../../ D:\code\mediasoup-client-android\mediasoup-client\deps\webrtc\src

如下图,要先点左边的’暂停’,右边才能通过命令 image lookup -vrn webrtc::PeerConnection::RestartIce 设置一个断点

备注
我开发环境是在windows + VirtualBox + Ubuntu 2004 虚拟机(编译相关库)
如上 webrtc\src 的代码需要跟虚拟机 webrtc\src 代码同步
我的方法是:Ubuntu 通过 smb 共享 webrtc 代码, windows 下用 BeyondCompare 比较同步
如果全部在 Ubuntu ,使用 ln 创建软链接,可能会更方便一些
有人可能会想到,直接把代码放 windows , 挂载到 Ubuntu ,在 Ubuntu 编译,很遗憾,我编译失败了。。。


参考自 https://webrtc.mthli.com/basic/webrtc-breakpoint/
该文中还有一些比较好 webrtc相关知识文档
比如 SDP 会话描述介绍 RTP 协议介绍 视频旋转角度


其它相关文档

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清霜之辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值