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 实际、连接要看谁掐的、清理要看按什么规则。排查先问"到底按什么判断的",能少走很多弯路。

相关推荐
zxy28472253012 小时前
C# 音频倍速播放
c#·音频·naudio·soundtouch·倍速
Water_Sunzhipeng6 小时前
HandyControl Demo 设置特定框架记录
c#
czhc11400756636 小时前
插补、另存为、标记过滤、采集超时——今天聊的四件事
c#
小羊没烦恼!7 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
小羊没烦恼!11 小时前
Memory 记忆设计讨论:为什么 Agent Memory 不能只靠向量数据库?
java·开发语言·windows·算法·c#
...62212 小时前
C# 中 Lambda 表达式的全面讲解
c#
...62213 小时前
WinForm中Socket通信服务端客户端代码实现讲解
tcp/ip·c#·socket
唐青枫1 天前
别只会看日志:C#.NET SOS 调试扩展从 Dump 到内存泄漏排查
c#·.net
yswenli2 天前
基于C#开发网站视频嗅探下载工具——BrowserVideoGrabber
c#·videodownload·webvideodownload·videograbber
Lost of 程序猿2 天前
M2 实战:询价与采购订单聚合落地——跨聚合一致性、领域事件与 Outbox
开发语言·c#·asp.net·.net