2026-08-25 博客:现场排查的 8 个坑

2026-08-25 博客:现场排查的 8 个坑

今天两场现场排查(一场查设备崩溃/通信,一场查界面图像不显示),沉淀出 8 个通用方法,核心就一句:排查先问"到底按什么判断的",别靠猜。


1. 排查顺序:看日志的正确姿势

概念

拿到一堆日志别乱搜,按三步走:

  1. 先分清日志有几种(不同模块/不同类型)。
  2. 搜完整的报错前缀 ,别用截断的关键词------教训:搜「加载失败」会漏掉「加载图像失败」(中间隔两个字)。
  3. 数每种报错的次数------能立刻看出是「偶尔」还是「批量」。

类比

「偶尔」= 偶发环境问题(某天数据被删);「批量」= 系统性代码或数据问题。次数就是分水岭。


2. 静默失败:日志里"零记录"本身就是线索

概念

代码 catch (Exception) { return false; } 把真正的错误吞掉、不打任何日志。出问题时日志里一条都没有。

类比

报警器坏了------出事了,但一点声音都没有。你不能因为"没听见警报"就认为"没事"。

伪代码

csharp 复制代码
try { 加载3D体数据(); }
catch (Exception) { return 初始化失败; }   // ← 吞掉了,不记日志
// DLL 缺失 / 文件不存在 / 格式不对,全都静默返回

排查铁律

看到日志里某个功能"零记录",先怀疑它是不是静默失败,而不是"没出错"。


3. 崩溃日志排查:两个事件号是"铁证"

概念

Windows 上 .NET 程序崩溃,事件日志会留下一事件,直接定位「崩在哪个模块、为什么崩」。

事件号 是什么 关键信息
EventId 1026(.NET Runtime) 未处理异常 exception code c0000005(访问违规)
EventId 1000(Application Error) 程序崩溃 故障模块名(哪个 DLL)+ 异常码

类比

行车记录仪------不用目击者回忆,直接看回放。


4. FileNotFoundException vs DirectoryNotFoundException

概念

两个异常一字之差,含义完全不同:

异常 含义
FileNotFoundException 文件不存在(但文件夹可能在)
DirectoryNotFoundException 路径中间的文件夹 不存在(Could not find a part of the path

排查意义

看到后者 = 整个目录被删了,跟代码无关(数据被清理 / 盘符映射错)。


5. 编码问题:GBK 的 0xE3 被当 UTF-8 读

概念

GBK 中文的首字节 0xE3,被 UTF-8 解析器读到,就报「非法字符」。

类比

两本密码本:文件用 GBK 写,解析器拿 UTF-8 密码本翻译,翻到 0xE3 就卡住。

表现

JSON 解析报 '0xE3' is invalid start of a value(配置里那段中文解析失败)------和"日志中文乱码"是同一类问题:GBK 和 UTF-8 混用。


6. 目标值 vs 实际值:命令"收到" ≠ "生效"

概念

排查"值为什么没变",要分清三件事:发出去了 → 被收到 → 生效了。中间每一步都可能断。

类比

发微信:"发送成功" ≠ "对方读了" ≠ "对方照做了"。

伪代码

复制代码
发:设电压 140
回:收到 140          ← 收到
读:目标电压 0        ← 没生效

假阳性陷阱

csharp 复制代码
// 稳定条件 = 实际 == 目标
if (实际 == 目标) 稳定;
// 陷阱:目标 = 0 时,实际 0 == 0 也判"稳定",漏掉真故障

7. 连接被中止:SocketException 10053

概念

网络连接被对端「主动掐断」,报 SocketException 10053(WSAECONNABORTED,软件中止已建立的连接)。

类比

打电话,对方没挂断提示,直接"啪"地剪线。

排查方向

连的是谁(localhost 的什么服务)、那个服务为什么掐断(崩溃 / 超时回收 / 防火墙)。


8. 自动清理:按时间,不按大小

概念

"自动清理"有两条路:按时间 清(超 N 天就删),或按大小/空间清(磁盘快满才删)。要搞清楚是哪种。

类比

  • 按时间 = 冰箱里的菜放超过 7 天就扔(不管冰箱满不满)。
  • 按空间 = 冰箱塞不下了才扔。

伪代码

csharp 复制代码
// 按时间清理(只看年龄)
if (文件.最后修改时间 < 现在 - N天) 删除;
// 完全不看:文件大小、磁盘剩余空间

局限:磁盘被大量"没过期的新文件"塞满时,按时间清理帮不上忙。


小结

这 8 个坑,本质是同一句话:「看到的不一定是真的」------日志零记录要怀疑静默失败、崩溃要看事件日志、异常要分文件还是目录、编码要看字节、值要看目标 vs 实际、连接要看谁掐的、清理要看按什么规则。排查先问"到底按什么判断的",能少走很多弯路。

相关推荐
Z5998178411 小时前
c#软件开发学习笔记--WPF(控件、样式)
笔记·学习·c#
格林威2 小时前
C#高位深相机图像保存:12位16位图像保存方案,OpenCvSharp和Halcon实现
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
雪隐2 小时前
WPF + MVVM 实战系列03-MVVM 的边界之争,终于有人画了条“差不多”的线
c#
影寂ldy2 小时前
C# WinForm TCP聊天室(服务端+客户端)
windows·tcp/ip·c#
七仔啊3 小时前
C#、.NET 、ASP.NET Core、Visual Studio全系列快速入门
c#·asp.net·.net
李高钢15 小时前
REST vs gRPC 选型对比与迁移实践:从原理到落地
c#·集成·winforms
一个帅气昵称啊16 小时前
.Net C# AI智能体开发-快速开始
开发语言·c#·.net
半亩码田19 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#
楠楠子呀1 天前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl