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 越来越多,总结出一套方法论,前提需对技术原理有正确理解,并且对业务足够熟悉

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

相关推荐
程序员鱼皮2 天前
Agent Skills 傻瓜式教程,26 年最火 AI 技术就这?
计算机·ai·程序员·agent·编程经验
黑客-雨4 天前
DeepSeek-V3.2深度拆解:开源模型逆袭,GPT-5迎来劲敌!
人工智能·程序员·大模型·知识图谱·agent·大模型教程·deepseek-v3.2
紫雾凌寒4 天前
【 HarmonyOS 高频题】2026 最新 ArkUI 开发与组件面试题
ui·华为·面试·程序员·职场发展·harmonyos·ark-ui
xiaobobo33305 天前
EIDE的最新版本已经默认只支持debug调试STM32单片机了
stm32·单片机·debug·eide
IT技术分享社区6 天前
GTID 结构升级 + JSON 视图强化,MySQL 9.6 创新版带来哪些性能提升?
数据库·程序员
小阿鑫6 天前
32岁程序员猝死背后,我的一些真实感受
前端·后端·程序员·代码人生
十年编程老舅6 天前
虾皮C++一面:C++四种类型转换详解
程序员·编程·c/c++
紫雾凌寒6 天前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
程序员鱼皮9 天前
20 个神级 AI 编程扩展,爽爆了!
ai·程序员·编程
一晌小贪欢12 天前
Python 异步编程深度解析:从生成器到 Asyncio 的演进之路
开发语言·python·程序员·python基础·python小白·python测试