本节摘要:诊断缓冲区记录CPU的每一次异常经过,跟踪抓取毫秒级变量轨迹,监控表读写现场变量,在线离线比对揪出"程序不一样"的暗病。本节讲四样工具的本性与组合套路,并给出青线的排查顺序口诀——先看系统说什么,再让变量开口,最后才怀疑程序。
排错是工业程序员的日常副业,工具就是兵器。四样兵器各有脾气:有的记史、有的录像、有的动手、有的照妖。这一节不讲菜谱,讲每样兵器的本性与它们组合成套路的打法——6.5节的实战复盘会把这套打法完整演一遍。学兵器有一条总纲:每样工具回答一个不同的问题,用错工具比不用工具更浪费时间——用监控表去找偶发故障的成因、用跟踪去查"程序是谁改的",都是南辕北辙。先问"我要回答什么问题",再选兵器,这是本节的隐藏目录。
诊断缓冲区是CPU自己写的日记:上电、参数错误、通信伙伴掉线、超时触发、程序错误,每次事件记一条,带毫秒级时戳与事件号。它最珍贵的品质是不撒谎也不遗忘——你半夜赶到现场,早上的故障经过还完整躺在缓冲里。排错第一动作永远是读它,因为它告诉你"系统认为自己经历了什么"。缓冲区的反面教材也值得记:有人把它当错误日志随手清空"眼不见心不烦",清掉的是下一次故障最宝贵的对照样本——缓冲区的管理原则只有一条:只导出,不清除。
读缓冲有三诀。先看时序再看内容:两条事件的先后关系经常就是因果(先有通信掉线后有停机,方向就清楚了)。事件号入字典:每类事件在团队字典里有一行人话解释与既往案例链接,新人也能查号入座。容量有限要导出:环形缓冲写满挤旧,重要事件当场导出归档——6.5节那次事故的完整时间线就是从缓冲区导出的。顺带接上6.1节的留痕纪律:自己代码里的Alarm_Log与系统缓冲并行运转,一个记业务异常,一个记系统异常,两本对读才有全貌。
诊断缓冲告诉你"出过什么事",跟踪告诉你"变量是怎么变的"。它在触发条件满足的前后若干周期里,按周期采选定的变量,把轨迹画成曲线——1.3节扫描周期时序的肉眼版。青线用跟踪解决过三类经典问题:信号抖动(看到触点在一毫秒内跳了三次,滤波参数当场定案)、时序竞争(两个信号的先后比图纸假设差了两个周期)、PID震荡(4.3节整定时那三条曲线就是跟踪画的)。
用跟踪的门道在触发设置。触发源选"出问题的那个信号",触发位置留出前置采样——故障发生前的过程往往比发生后更说明问题。青线惯例是前置七成、后置三成。跟踪的局限也如实说:它占CPU资源,不能长开;高频信号受采样周期限制,真·高速信号要靠硬件手段——知道工具的边界与知道工具的用法同样重要。

监控表成组监视变量,是日常调试最高频的工具:把一台设备的相关变量放一张表,状态一目了然。青线的监控表按设备组织并随工程入库——每台设备的表就是它的"体检单",交接班时把当天的异常变量截图贴进日志,排查时翻日志比重新猜快得多。它的另一半能力是修改与强制——手动改变量、强制输出,现场调试离不开,但这是手术刀:青线纪律是强制必须清单化(强制了什么、为什么、何时解除)、限时、双人在场、用后即解除。曾有大厂因遗忘的强制输出在检修时设备突然动作酿成事故,这条纪律在行业里是用血写的。
最后一样兵器最尴尬也最有用:比对在线程序与离线工程的差异。它照出的通常不是bug,而是管理问题——某位同事在现场为了赶进度在线改了一行,没回写工程、没记变更单,三个月后另一人从版本库下载,"莫名其妙"的行为差异就此诞生。青线把比对列入每次重大排查的固定步骤与每次交接班的常规动作:先确认跑的确实是该跑的程序,再谈逻辑对错。7.4节的版本管理会把这类事故的预防讲成制度。
把兵器组合成套路,青线沉淀了三类题的标准打法。偶发题(故障一天一次甚至一周一次):诊断缓冲当主侦探——偶发题最怕现场等待,缓冲里躺着历史全过程;配合每日导出归档,连跑两周常常攒出规律。动态题(信号抖动、时序竞争、震荡):跟踪当主侦探——它拍的慢动作曲线是唯一能看见毫秒级真相的窗口;开跟踪前先把怀疑变量收窄到五路以内,采样周期给足余量。一致性题(行为与预期不符但查不出原因):照妖镜当主侦探——先照在线离线差异,再查参数与文档的版本对应,一半的"灵异故障"死在这一照。
三类题之外还有一个通用前置动作:把操作员的口述翻译成数据问题。"机器有时会自己慢下来"翻译成"哪个量在什么条件下低于什么阈值"——翻译得越精确,兵器打得越准。排错的功夫,一半在工具,一半在把现象翻译成数据的能力。
诊断工具不是都等到现场才用,青线的离线工具箱让"到场前的准备"决定现场效率。交叉引用表:拿到任何一段陌生逻辑,先生成它的读写关系图,十分钟建立全局感——现场宝贵的窗口时间不花在认路上。负载与周期仿真:程序在离线环境跑周期估算,潜在的超时段子提前现形——6.5节那晚若做过这项,轮询代码活不到现场。用例预演:7.2节的用例库在离线环境预跑一遍,把"要在现场验证什么"列成清单,现场只做清单上的事。备件核对:根据缓冲区历史里的故障型号,把最可能用到的备件与工具装进工具包——现场最常见的浪费是"差一个转换头跑一趟库房"。
离线准备的极限测试很简单:设想现场网络不通、HMI不可用、只有笔记本和万用表,你能不能把嫌疑收窄到两个块之内?能,说明离线功课做足了;不能,回炉的方向也已经在题干里。
兵器在手,下一节把它们全部用上一场真实事故的完整复盘——青线最著名的不眠夜。