ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

偶发Bug排查三板斧:换机排除、录屏取证、新旧批次对照

偶发Bug排查三板斧:换机排除、录屏取证、新旧批次对照 偶发 bug 大概是硬件开发里最磨人的东西了。它不像必现的崩溃改一行代码就能验证也不像编译报错Google 一下就有答案。你刚准备抓它它就消失你宣布修复它又冒出来。串口假故障、蓝牙偶发断开、烧录时好时坏这三类问题我这些年都踩过不少也见过团队里新人面对它们时一脸茫然的样子。总结下来最有效的思路其实就是三板斧换机排除、录屏取证、新旧批次对照。这篇文章不聊高大上的理论就把我这几年在嵌入式、物联网和硬件调试一线用过的、验证过的方法摊开来讲。适合正在被串口、蓝牙、烧录问题折磨的工程师、创客和学生看完你至少能知道遇到偶发问题第一步该做什么哪些证据必须留怎么用一个“新旧批次对照”的笨办法直接锁死烧录故障的根源。1. 偶发 bug 的排查心法先定性、再定位、后定因1.1 偶发 bug 为什么这么难缠偶发 bug 最大的问题在于“证据缺失”。必现 bug 你打开调试器、加个断点、逐行观察就能揪出来偶发 bug 是它想出现才出现你盯着它的时候它从来不出现。这种间歇性让很多工程师下意识地开始“猜”是不是时序问题是不是定时器配置错了是不是编译器优化搞的鬼猜着猜着就把代码改得面目全非问题反而更严重。我从实际经验里总结出偶发 bug 难缠有三个具体原因。第一是环境依赖温度、供电纹波、USB 口供电质量、附近有没有大功率设备甚至你手摸没摸到板子都可能影响复现。第二是时间窗口短很多偶发问题只持续几十毫秒甚至几微秒普通调试手段根本来不及捕捉。第三是触发条件不明确你以为的触发条件比如按了某个按键很可能只是巧合。这个过程中最该记住的原则是先定性再定位后定因。定性就是判断问题属于哪一类是通信问题、电源问题还是固件问题定位就是找出是哪一级出问题定因才是最终找到根因。很多人上来就定因跳过前两步结果就是在错误的层级里反复折腾。比如串口收不到数据你第一反应不应该是去翻协议栈代码而是先判断是线的问题、USB 转串口芯片的问题还是单片机引脚的问题。1.2 破局三板斧换机排除、录屏取证、批次对照顺着“先定性”的思路我逐渐沉淀出三个最实用的手段分别对应三类典型偶发故障。换机排除法主要用于判断问题是否出在某一台设备或某一条链路上。做法很简单把可能出问题的环节换掉看故障是否跟着走。串口假故障十有八九靠这一招定位后面我会详细展开。录屏取证法主要用于解决“复现了但你没看见”的问题。蓝牙偶发断开、界面偶发卡顿这种问题光靠眼睛盯是盯不住的必须把现象录下来、把日志打出来才有分析的基础。录屏不是简单的手机拍屏幕要设计好信息采集方案。新旧批次对照法主要用于解决“同一套代码不同硬件表现不一致”的问题。烧录失败、跑飞、异常复位这类问题经常和芯片批次、Flash 型号、晶振批次有关。把新旧批次放在一起对照烧录、对照测试可以非常高效地锁定是硬件差异还是软件问题。这三板斧都是“笨办法”但实测下来比瞎猜代码高效得多。我见过太多人拿着示波器东点西戳几个小时最后发现只是 CH340 驱动被系统更新搞坏了——这种问题换台电脑就能立刻现出原形。2. 串口假故障先质疑硬件再质疑代码2.1 假故障的典型症状与真凶串口假故障的症状非常具有迷惑性。最常见的是代码逻辑翻来覆去检查了好几遍没问题串口调试助手打开端口也识别了波特率也选对了就是收不到数据或者收是能收到但全是乱码又或者刚开始通信正常运行几分钟后突然卡死程序看着还在跑数据就是出不来。这种时候大多数人会陷入一个误区开始怀疑自己的初始化代码。我见过有人把 UART 初始化函数重写了七八遍还有人反复调整波特率寄存器分频值最后发现跟代码一点关系都没有——问题出在 CH340 串口驱动的电源管理上Windows 在设备空闲时自动挂起了 USB 转串口芯片导致通信假死。假故障的“真凶”大致集中在五类驱动问题如 CH340、FTDI 驱动版本不对或冲突、硬件链路问题线材内部断裂、USB 口供电不足、转串口模块虚焊、电平不匹配3.3V 设备接了 5V 电平、地线问题两个设备地电位不共地、以及工具问题虚拟串口软件参数设置错乱。注意这五类里没有一类是“你的 UART 初始化代码有 bug”。所以遇到串口异常我的默认动作永远是先质疑硬件链路再回头看代码。2.2 换机排除法的完整操作路径串口排查里最快的一招就是换机排除。核心逻辑很简单如果故障跟着某个设备走那问题就在那个设备上如果故障跟某台电脑走那问题在电脑环境里如果换了所有设备和电脑故障还在原板子上那才轮到怀疑板子本身。具体操作我通常按以下顺序来每一步都有明确判断依据第一步换 USB 物理端口。把 USB 转串口模块从当前 USB 口拔下来换到主机背面另一个口最好避开 USB Hub。很多时候是前面板 USB 口供电不足导致串口芯片工作不稳定这一换就好了。第二步换数据线。这一步成本最低但最容易忽略。我手头有十几根 Micro USB 和 Type-C 线很多是只会供电不能传数据的“充电线”插上去设备能上电但枚举不出来。建议花点时间用带数据传输的线做基线排除这一项。第三步换电脑。把板子和转串口模块整个拿到另一台电脑上用它的串口调试助手试。如果新电脑一切正常问题基本锁定在旧电脑的驱动或串口工具配置上。这时候可以去装 CH340 官方驱动、检查设备管理器里的 COM 口号是否被占用。第四步换 USB 转串口模块。把 CH340 换成 FTDI 的模块或者反过来。这一步能暴露芯片本身的兼容问题。我之前遇到过一个批次CH340 在某个老旧工控机上死活识别不了换成 FTDI 模块立刻正常。第五步换目标板。当你做完前面四步仍然无法定位最后才考虑换一块同型号板子看故障是否跟着板子走。如果换了板子故障消失那基本就是板子硬件设计或焊接的问题这时候再看原理图查引脚配置方向就清晰了。这套流程下来大部分串口假故障会在前两步内解决。别小看换 USB 口这个动作我实测解决过至少三起“偶发通信中断”根因就是主机前面板 USB 供电纹波太大换个后置口问题消失。2.3 电平转换3.3V 转 1.8V 的三极管电路坑串口假故障里还有一种容易劝退新人的情况电平不匹配。典型的场景是 3.3V 单片机要跟 1.8V 的模块通信两边逻辑电平阈值完全不同直接接上去偶尔能通但温度一变、电压一波动就出现间歇性乱码或完全收不到。很多低成本方案用三极管做电平转换原理是共发射极反相器结构通过集电极电阻上拉到目标电压实现电平搬移。这个电路看着简单实际布出来坑很多。第一速度上不去。三极管开关速度和基极电阻、集电极电阻都有关如果你跑 115200 波特率还勉强跑到 460800 或 1M 波特率时边沿会明显变缓出现误码。第二方向不可逆。这类电路通常是单向的你在 TX 方向用了它RX 方向也得再做一路很多人只做一路导致收不到数据还以为是时序问题。第三上拉电阻值不对会导致高电平拉不到目标阈值低电平时又泄放不干净产生概率性的错误帧。如果让我给建议串口电平转换优先用专用的电平转换芯片比如 TXS0108E 这种自动双向方案或者用两个 MOS 管组双向电平转换电路。三极管方案只在低速、单向、成本极度敏感的场合用而且一定要拿示波器看实际波形确认高电平幅度和边沿时间都达标再投产。判断电平问题有一个很实用的土办法把波特率降到 9600如果乱码消失大概率就是电平转换电路或者线材质量影响信号边沿而不是协议参数设置错了。这个经验在串口屏、GPS 模块、蓝牙模块调试时屡试不爽。2.4 衍生场景串口 DMA、ROS2 串口桥接与 Linux 串口丢数据串口假故障还会以更隐蔽的形式出现在进阶场景里。比如串口 DMA很多单片机用 DMA 接收串口数据偶发出现“收一次丢一次”或者“最后几字节没收到”的情况。这往往是 DMA 的半空中断和串口空闲中断配合不当或者是缓冲区指针处理有竞态。遇到这种问题不要上来就改 DMA 配置先把 DMA 关掉、改用普通中断接收跑一段时间如果问题消失才说明跟 DMA 有关如果问题还在说明是更上游的问题。Linux 下调试串口则是另一种画风。用 Ubuntu、ROS2 Humble 做串口桥接 ESP32 小车的时候最常遇到的是“从串口接收数据丢失”和“打开串口报权限错误”。前者大概率是系统默认的 16550A UART 驱动 FIFO 触发阈值太低高频数据流下频繁丢字节后者是 dialout 用户组权限没加。这两个问题都很容易误判成嵌入式端的 bug但换机排除法同样适用——把同一个 USB 转串口模块插到 Windows 上用串口调试助手收同样的数据如果数据完整就可以反向确认不是嵌入式端问题。还有一类比较冷门但真实存在Linux 网口转串口服务器。这类设备走 TCP 转串口偶发断连时最难排查。我的经验是先用虚拟串口软件在 PC 端建立一个虚拟 COM把网络数据映射成本地串口再用串口调试助手抓包。如果虚拟串口也掉线问题通常在网线链路或网络连接稳定性上如果虚拟串口稳定、真实串口掉线那才需要怀疑串口服务器硬件本身。3. 蓝牙偶发断开录屏取证才是硬道理3.1 蓝牙问题为什么“玄”蓝牙设备偶发断开是另一个让我头大的问题类别。HC05 蓝牙模块连接不上、ESP32 蓝牙连上后随机断开、蓝牙键盘用着用着没反应、杰理蓝牙方案播放中途断连这些现象的共同点是你永远没法在发现问题的那一刻拿起逻辑分析仪去抓波形。蓝牙问题“玄”是因为它的干扰源太复杂。2.4GHz 频段本身就有 Wi-Fi、微波炉、USB 3.0、无线鼠标接收器在抢信道。再加上很多设备的天线设计几乎是随手画的匹配电路也没仔细调实际发射功率跟数据手册相差甚远。低功耗蓝牙还有休眠唤醒机制功耗管理策略稍微激进一点就容易出现连接超时。这种情况下单纯看代码很难发现为什么断因为你缺的是“现场证据”。我曾经花了两天时间查一个 ESP32 蓝牙断连问题代码层面看空闲广播、连接参数、从机延时都没问题最后是录屏时发现每次断连前手机屏幕上都会先弹 Wi-Fi 信号变弱的提示——原来 ESP32 的板载天线和旁边的 Wi-Fi 天线靠得太近Wi-Fi 一重传蓝牙就被饿死了。如果不是录屏我根本不可能把“Wi-Fi 变弱”和“蓝牙断连”这两个事件关联起来。3.2 录屏取证的完整流程与信息要点蓝牙问题的取证核心思路是把“不可见的无线电事件”转成“可见的时间线”。具体做法如下。第一层录现象。用另一台手机对着出问题的设备录屏拍清楚操作步骤、指示灯变化、屏幕显示内容。如果问题设备本身是手机 APP 控制 ESP32 这种场景直接用手机自带录屏功能录屏把控制操作、界面状态、时间都记录下来。第二层打日志。在嵌入式端加日志把蓝牙连接状态、重连次数、RSSI 值、错误码都打出来。注意要打带时间戳的日志用 RTT 或者串口输出都行。这里说个细节串口日志的波特率要固定时间戳要精确到毫秒级否则后面跟录屏对齐时误差太大。第三层抓空口包。如果有条件用一个 nRF Sniffer 或者 TI 的 CC2540 USB 棒配合 Wireshark 抓空中的蓝牙数据包。这能直接看到是谁发的断开指令、断开的 reason code 是什么。不是所有场景都有这个工具但一旦抓到基本就一锤定音了。没有硬件 Sniffer 的时候也可以先把 Android 手机里的蓝牙 HCI 日志打开系统会记录蓝牙协议栈内部事件导出后拉的时间线非常精细。录屏时还有个容易忽略的点时间同步。手机录屏界面开一个数字时钟悬浮窗或者在日志里设计一个周期性闪烁的 LED录屏时把 LED 的闪烁也拍进去后续分析时就能用 LED 闪烁作为共用时间基准对齐录屏和日志。这个方法土但比你在日志里写“大约 3 秒后断开”可靠得多。3.3 日志与录屏的时间轴对照法拿到录屏和日志之后千万别凭感觉看正确姿势是拉一条时间轴把事件对齐。我常用的是把视频导入剪辑软件逐帧看日志则导成 CSV标记每一个关键事件点。两边的事件一列问题模式往往就自己浮现出来了。举一个实际例子。某次排查蓝牙键盘偶发断连日志里显示断开前收到一次 HCI Disconnect Completereason code 是 0x08Connection Timeout说明链路层超时但为什么会超时却不知道。把录屏逐帧看发现每次断连前用户都会先快速敲击几个键然后停下来思考几秒。再翻日志发现键盘在用户停顿时进入了深度休眠唤醒流程需要重新协商连接参数而主机端的连接间隔没等到就判定超时了。找到这个模式后解决方案就很简单调低休眠灵敏度或者在休眠前主动断开、唤醒后主动重连而不是让链路层被动超时。这个问题如果只看日志不看录屏会一直以为是对端蓝牙芯片的 bug根本不会想到是用户打字节奏触发了休眠策略。时间轴对照法还能用来排查“蓝牙测距”场景。用蓝牙做 RSSI 测距时偶发出现距离跳变录屏加日志同样有效——把手机靠近、远离的过程录下来对照 RSSI 采样日志能很快发现是滤波器参数太激进导致的跳变还是环境遮挡导致的信号衰减。3.4 蓝牙业务的常见坑从 HC05 到杰理方案蓝牙模块的坑也很有年代感。HC05 蓝牙模块连接不上是新手区最常见的问题大部分原因跟代码没关系进入 AT 模式时要按住模块上的按键再上电很多人不知道默认波特率是 38400不是 9600模块和 USB 转串口的 RX/TX 要交叉接。这些都是老生常谈但每年还是有一堆人卡在这。稍微进阶一点的是经典蓝牙和低功耗蓝牙的区别。HC05 这种经典蓝牙模块适合透明传输但不适合低功耗场景像 ESP32-S3 使用蓝牙的时候就要分清用的是 Bluetooth Classic 还是 BLEAPI 和功耗表现完全不同。这个选择做错了后面出现偶发断连基本无解因为你要么在用一个不做低功耗设计的模块硬跑低功耗场景要么在用一个省电设计过度的模块跑高实时性场景。杰理蓝牙方案在成本敏感的量产项目里很常见但它有个普遍问题原厂 SDK 的协议栈上下文切换偶尔会埋雷。我遇到过“杰理蓝牙连接正常但音频卡顿后断开”的问题录屏显示断开前音频先断断续续约 1 秒日志里显示 SPI 读取麦克风数据超时。后来是换了更新的 SDK 版本才好。这种问题靠换机排除法很难奏效因为所有设备都一样最好的办法就是录屏取证、对比新旧 SDK 版本的表现。另外提一下 CSR8510 A10 蓝牙驱动很多老式蓝牙适配器用的这个芯片在 Windows 10/11 下经常出现设备能识别但无法配对的问题。遇到这种别去调系统设置直接换个不同芯片的 USB 蓝牙适配器问题立刻见分晓——这就是换机排除法的典型案例驱动不兼容的假故障被一次硬件替换直接定性。4. 烧录排查“新旧批次对照”一锤定音4.1 烧录失败的几种典型形态烧录类偶发问题跟串口、蓝牙又有不同它发生在“开发环境”和“生产硬件”的交界处两边都能甩锅。常见形态有几种Keil5 烧录失败、VS Code 里编译成功却怎么也烧录不进开发板、Arduino Uno 给另一块 Uno 板烧录引导程序时提示 avrdude 错误、ESP32 用 FlashDownloadTools 烧录时随机超时。这些问题的麻烦在于编译成功说明代码没问题烧录失败说明下载器或目标板的链路有问题但这两者之间隔着太多环节驱动、下载器固件、目标板供电、Flash 型号、连接线、烧录工具的配置。而且烧录失败往往是间歇性的第一次烧进去了第二次就失败重启电脑又好了完全摸不着规律。我记得有一次用 Keil5 烧录 STM32报错信息是“Cannot access Target”上网搜了十几页试了各种 Debug 设置都没用。后来发现是下载器的排线松动接触不良导致的。这种问题本质上还是硬件链路问题但为什么有人调一整天都调不出来因为他没有先“换机排除”一直在一台电脑、一根线、同一块板子上反复试。4.2 什么是“新旧批次对照”法“新旧批次对照”法是我处理烧录问题最得意的一个方法。它的思路是当同一套代码在不同硬件上表现不一致时不要把时间花在怀疑代码上而是把新旧两个批次的硬件放在同一环境下做对照实验通过控制变量锁定差异点。具体操作分四步。第一步准备好新批次和老批次的样机各至少两块确保不是个别不良品。第二步用完全相同的烧录工具、连接线、烧录配置分别对四个样机烧录同一份固件逐台记录成功或失败。第三步如果老批次全成功、新批次全失败基本确定是新批次硬件差异导致跟代码无关。第四步从新批次里找问题点优先检查 Flash 型号、晶振频率、供电电路和下载器接口这几个最容易改动的部分。这个方法我实际用过一次印象极其深刻。一批物联网设备的固件采用 Motorola S19 格式烧录S19 文件本身是文本格式每行有地址和校验和老批次芯片烧录一切正常新批次芯片烧录时总是卡在某个地址附近报错。工程师怀疑是 S19 文件生成工具的问题改了好几轮转换脚本完全没用。我用新旧批次对照法把两块板子的 Flash 型号一查发现新批次换了一个低成本 Flash 品牌擦除时间比老款长了一倍烧录工具的擦除等待超时阈值没跟上才会在特定地址段失败。改一下烧录工具的擦除超时参数问题彻底解决。4.3 烧录链路拆解与常见翻车点烧录看起来只是“点一下下载按钮”但完整的烧录链路其实包含七个环节开发工具、编译输出文件、烧录工具软件、烧录器/下载器硬件、驱动、连接线、目标板上的烧录接口。任何一个环节状态不对都可能导致偶发失败。排查烧录问题时我习惯按这个链路逐一排除。目标板上的烧录接口是翻车重灾区。STM32 用 USB 烧录程序时需要把 BOOT0 拉高再复位进入系统引导模式很多人忘记处理 BOOT 引脚状态导致 USB 枚举失败。AT89S52 这种老芯片要用专门的烧录软件还要注意并口或 USB 烧录器的电源稳定性老芯片对供电很敏感供电电压不够时擦写会随机失败。C6748 用串口烧录时要关注启动模式引脚的电平和上电时序串口烧录对启动引脚配置尤其严格。ESP32 的烧录翻车点则集中在 Flash 频率和供电上。用 FlashDownloadTools 烧录 ESP32 时如果 SPI Flash 频率设置高于芯片实际支持频率烧录时能过、运行时随机崩溃如果供电不足烧录过程中会出现经典的“A fatal error occurred: Packet content transfer stopped”错误。这两种情况换机排除法往往不好使因为每台电脑都这样但新旧批次对照法很管用——老批次用 80MHz Flash 频率稳定新批次必须降到 40MHz 才稳定一对照就知道是 Flash 型号差异。另外还有一个非常隐蔽的翻车点下载器排线过长。SWD 接口的时钟频率高一点排线超过 20cm 就容易出现偶发通信失败。如果你用的还是杜邦线那问题更随机。遇到这种情况把排线换成最短的一根短线问题可能直接消失。这种问题你查代码查一天也查不出来因为它根本不是代码问题。4.4 批次记录表让对照有据可查新旧批次对照法要真正有效记录必须做得细致。我建议做一张“批次硬件差异记录表”把每个批次的硬件关键信息都登记在册出问题时直接查表对照。记录项老批次正常新批次异常排查结论主控芯片型号/批次STM32F103C8T6同型号无明显差异Flash 型号Winbond W25Q16某国产低端 Flash擦除时间差异晶振批次32.768kHz 普通晶振同规格无明显差异供电方案RT9013 LDO同型号无明显差异烧录接口方式SWD 排线 10cmSWD 排线 25cm排线过长固件格式S19S19无明显差异烧录工具版本FlashDownloadTools V3.9同版本无明显差异这张表不是事后诸葛而是在拿到新批次物料时就要提前更新。很多工厂换料不走正规流程BOM 上写着同型号实际贴片用的 Flash 品牌换了生产端不会通知研发。如果你手头始终有一张准确的批次记录表出问题时一查就能圈定嫌疑范围。我见过有团队用“新旧批次对照”法解决过一个极其诡异的问题Arduino Uno 给另一块 Uno 板烧录引导程序总是烧到一半报错。对照表查下来发现新批次的 Uno 板把 16U2 换成了更便宜的替代芯片替代芯片的 USB 转串口时序略慢导致 avrdude 握手超时。问题的根源根本不在引导程序本身而是换料导致的下位机通信时序变化。这种差距靠看代码永远发现不了只有对照批次记录表才能快速定位。5. 实战工具箱与避坑清单5.1 桌面常备的排查工具经过这些年踩坑我桌面上常年备着一套固定工具遇到偶发 bug 时能随手抄起来就用。硬件方面至少两块不同主控的 USB 转串口模块CH340 和 FTDI 各一块一套好的杜邦线和短的 SWD 排线一个简易逻辑分析仪。逻辑分析仪不必买贵的8 通道 24MHz 采样的就够用。还有一个可调电源排查供电问题必备——很多偶发 bug 在实验室电源下不出现一到电池供电就现形可调电源能模拟各种供电条件。软件方面串口调试助手至少装两个一个日常用一个专门拿来交叉验证。虚拟串口软件如 VSPD可以在没有真实硬件时模拟串口对用来测试自己的上位机逻辑。录屏工具推荐用 OBS延时低还能同时录制系统音频和麦克风方便做语音注释。蓝牙日志分析用 Wireshark加上一块 USB 蓝牙 Sniffer 硬件能抓取空中的 BLE 数据包。这套工具不是说让你一次全买齐但至少要有“换机排除”的最低条件两块不同芯片的转串口模块和两台电脑。很多时候你以为你在调代码其实你在调环境环境不具备可替换性你就永远无法完成切换实验。5.2 偶发 bug 排查速查表我把三类问题的高频原因和对应处理手段整理成一张速查表方便大家现场排查时对照。问题类型典型症状高概率原因首选排查手段串口假故障收不到数据/乱码CH340 驱动问题、USB 口供电不足、线材不通换 USB 口换线再换电脑串口假故障波特率越高越乱电平转换电路不达标、线材过长降波特率用示波器看波形蓝牙偶发断开连接后随机掉线2.4G 干扰、休眠策略、协议栈版本录屏日志时间轴对照蓝牙连接不上配对失败/搜不到模块未进入 AT 模式、波特率不对看录屏确认操作时序烧录失败编译成功但下载失败SWD 线过长、供电不足、Flash 型号差异缩短排线检查供电烧录失败旧批次正常新批次失败硬件换料、Flash 擦除时间变化新旧批次对照记录表烧录失败USB 枚举失败BOOT 引脚状态不对、驱动冲突换电脑换线检查 BOOT 配置这张表不能帮你直接解决所有问题但能帮你把思路拉回正轨。偶发 bug 最大的敌人是“漫无目的地猜测”有了这张表和前面的三板斧你至少每个步骤都有明确的实验依据。5.3 三个心态留证据、变单变量、别硬扛技术手段之外排查偶发 bug 更考验心态。我总结出三条对自己行之有效的原则。第一条永远保留现场证据。不管是串口日志、录屏视频、还是烧录报错的截图先存下来再动设备。很多人看到问题复现第一反应是“赶紧改代码试试”结果问题没解决证据也没了。正确做法是先完整记录现象再开始排查。第二条一次只变一个变量。这是所有工程实验的基本准则但在偶发 bug 排查时最容易破功。你可能同时换了驱动、改了波特率、又拆了根线问题解决了但你根本不知道是哪一步生效的。我要求自己每次只改一个变量改完跑足够长时间确认结果再动下一个。第三条别硬扛。排查时间超过 3 小时还没头绪果断停手做三件事整理已有的证据、重新描述问题现象、找同事用旁观者视角看一眼。很多时候你陷入思维定势远不如一个没接触过这个问题的人来得敏锐。跟同事讲问题的过程本身就是再梳理一遍逻辑经常讲着讲着你就自己发现盲区了。我在实际工作中还有一个体会偶发 bug 往往不是一个复杂问题而是一个被“想复杂了”的问题。串口假故障背后可能只是一根不能传数据的充电线蓝牙断开背后可能只是 Wi-Fi 天线离得太近烧录失败背后可能只是物料批次换了型号。你越是冷静地按照“换机排除、录屏取证、新旧批次对照”的顺序走就越早会在一个最不起眼的环节里抓到真凶。最后再分享一个小技巧每次解决完一个偶发 bug花 5 分钟写一条排查笔记把现象、排查过程、根因、修复手段记下来。积累一年之后你会发现绝大多数所谓的新问题都是你笔记里某个旧问题的变体。翻一翻笔记十分钟就能定位比重新踩一遍坑高效得多。
返回列表