Debug一些感悟

一、前言

22年底后,团队人员变动后,项目疑难线上问题的跟进解决工作落到我身上,同年承担大型项目的开发,其复杂性以及紧凑的时间线导致QA阶段BUG数量较多。

23年是我的BUG元年,累计解决BUG数量超500个。

在我刚入职XX时,我Leader是个BUG专家,很多时候在描述现象后,能快速定位到BUG根因;

年轻的我十分羡慕这种功力, "Coding五分钟,Debug三小时",Debug效率提升会让你少加很多班,省下的时间可以拿去撩妹,打机,或者去舔你老板拿高绩效。

500个BUG,你已经深入理解你负责的业务系统,同时对代码运行的底层逻辑有抽象整体的感知,这都能很大程度提升Debug效率。

500个BUG,从措手不及,到游刃有余。

二、疑难BUG案例

什么是疑难BUG,定义也许有很多种,但一定有个共性, "无法"复现,展开如下

  • 存在复现路径,但概率复现
  • 存在复现路径,但十分隐蔽,定位后可以稳定复现

这里分享两个疑难BUG案例

2.1 Bluetooth Sco 无限重连干扰通话

简述下背景,项目使用 Agora(声网)构建RTC功能,VIP用户在使用过程出现音频断续问题;问题十分棘手

  • 无法复现
  • Agora技术团队介入排查近一周后没有结论

在完成手头优先级较高的需求后,介入排查,基于用户描述,在关闭蓝牙后,问题消失,以此为切入点,与AgoraTeam协同梳理RTC层蓝牙连接相关日志,发现蓝牙Sco连接在不间断断开重连,因现象无法复现,对此我们提出一些猜想

❌ 猜想一:Samsung SM-S908E(Android 13)系统重复执行startBluetoothSco

日志显示,SCO_UPDATE广播在重复回调 Disconnected → Connecting → Connected,初步确定是重复执行sco连接导致通话异常;且因在通话过程中,用户携带了蓝牙手表等原因,大家的猜想基本一致(但因缺乏复现设备,暂无法验证);

在AgoraTeam提供修复包(监听Disconnected广播并主动stopBluetoothSco)后, 打包验证失败,猜想错误

❌ 猜想二:AgoraSDK 在特定场景下,重复执行 startBluetoothSco

个人经验,(Android)系统往往是稳定的(除非是Beta版本),所以我猜测业务层有重复执行startBluetoothSco的逻辑,但在和AgoraTeam确认后,SDK理论上在joinChannel时执行一次startBluetoothSco,猜想错误

猜想三:SeaTalk 在特定场景下,重复执行 startBluetoothSco

福尔摩斯说过:"当你排除一切不可能的情况,剩下的,不管多难以置信,那都是事实。"

在提出这个猜想后,我们把关注点从RTC层移到了业务层 ,回溯业务日志后,发现(新版本)确实在重复调用startBluetoothSco,在出包委托用户验证后,成功修复

2.2 锁屏状态接听通话异常

背景简述,用户在通话一分钟左右后,音频无法正常传输,一般使用RTC功能,需要开启前台服务保活,我们在正常路径尝试后无法复现,于是提出猜想

❌ 猜想一: 用户对应用开启了电池受限模式,在进入后台后,系统录音服务被暂停

应用默认电池模式是优化状态的,我们在把应用切到受限模式后切到后天进行通话,Samsung-S12可稳定复现

但在与用户联系确认后,却发现应用处于电池优化状态,事情变得棘手了,在猜想无法快速验证且找不到切入点时,我们可以看下日志,把核心路径的链路梳理完毕后,也许你能找到一些线索,细节如下 可以发现用户的异常通话,均是在锁屏状态下收到来电,然后快速锁屏(进入后台),当应用进入后台后,系统暂停了录音服务;根据日志路径成功复现,并提出猜想

❌ 猜想二:特定路径下,系统兼容性问题

控制设备系统变量,相同的路径下低版本无法复现,可确定属于新版本代码引入的问题

猜想三:特定路径下,Service启动失败

锁屏状态下,收到来电,CallService压根没执行,这会导致SeaTalk进入后台时,没有前台服务,系统认定为后台进程,音频采集线程被暂停,猜想成立

2.3 挑战

在接手一些"无法"复现的疑难BUG时,我对相关逻辑完全是零基础的陌生状态,这要求开发

  • 在短时间内快速掌握核心流程逻辑,全面理解上下文,排除干扰因素
  • 再进一步基于问题现象或日志,结合相关技术,确定复现路径,提出猜想,再进行验证

有些问题属于VIP性质,十分紧急,时间压力会比较大,在压力巨大的场景快速解决,能进一步提升研发专业能力。

三、沉淀

Debug三个核心过程,定位(查找根因) -- 梳理(捋清楚上下文)-- 修复(Coding,必要时重构)-- 归因分析(尝试找出优化点,设计避免重犯机制);普通开发往往会忽略"梳理"和"归因分析"这两个步骤,缺乏"梳理",会导致在修复阶段引入其他BUG,缺乏"归因分析",往往会导致在后续迭代过程,出现类似的问题。

量变促进质变,随着解决的线上问题与业务 BUG 越来越多,总结出一套方法论,前提需对技术原理有正确理解,并且对业务足够熟悉

流程节点可细化,类似验证阶段,针对不可复现的问题,需进行模拟验证,进一步保障假设成立

相关推荐
我要改名叫嘟嘟12 小时前
“如果喜欢一本书,你会重复阅读它吗?”
程序员
Xidaoapi15 小时前
Python FastAPI性能优化实战:8个让你的API快3倍的技巧
后端·程序员
阿里嘎多学长18 小时前
2026-05-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
窗边的anini20 小时前
那个因为 vibecoding 差点搞砸约会的女孩,被 TRAE SOLO 救了
前端·人工智能·程序员
程序员三时1 天前
看我你就不焦虑了,程序员!失踪人口回归,我去干嘛了!!!!
程序员·ai编程
文心快码BaiduComate1 天前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
hyunbar7772 天前
Git 死亡三连实录:pull 冲突 → push 被拒 → merge 炸锅,完整抢救指南
程序员
Captaincc2 天前
转载:如何一眼看出别人的财富量级
程序员
DogDaoDao2 天前
Windows 下 Git 报错:`touch` 无法识别 —— 原因分析与 7 种解决方案(从入门到精通)
windows·git·程序员·npm·powershell·cmd·touch
小孔龙2 天前
Android `<activity-alias>` 指南:动态图标 · 多入口 · 重命名兼容
android·程序员·掘金·日新计划