从 20 多个 bug 里归纳出的 6 类调试模式

1047 字
5 分钟
从 20 多个 bug 里归纳出的 6 类调试模式

写代码踩的 bug 成千上万,但归起类来,大部分 bug 都是同一类模式的重复。记录过 20 多个 bug 后,我发现它们收敛成 6 类模式。识别模式,比记住每个 bug 的细节高效得多。

模式一:编码 / 字符集问题#

典型症状:中文文件名乱码、特殊字符导致接口 500、自定义名称不被库识别。

常见根因:

  • 默认编码不对(比如归档工具用旧编码处理中文名)
  • 自定义名称和库内置字典对不上(tiktoken 不认模型名)
  • 文件名含特殊字符,URL 编码 / 解码不对称

通用修复思路:任何处理文件名、编码、名称的地方,都要验证字符串全链路传递正确——编码 → 传输 → 解码,任一段错就乱。

模式二:数据计算精度#

典型症状:统计值反复出错、数据重复写入、单日工时异常巨大。

常见根因:

  • 复杂计算逻辑在重构中丢失了某一段
  • 缺少防重复写入机制(幂等)
  • 总账没按基准摊分(单日 120h 这种不合理值没人挡)

通用修复思路:数据计算加防御层——输入验证 → 中间校验 → 输出合理性检查。不要只在末端验证。

模式三:配置 / 环境问题#

典型症状:服务连不上、构建撑爆磁盘、参数边界报错。

常见根因:

  • 服务绑定 127.0.0.1 而不是 0.0.0.0,外部连不上
  • 构建前不检查磁盘空间,直接打满
  • 参数校验边界两端不一致

通用修复思路:环境问题先查四件事——端口绑定、磁盘空间、权限、启动顺序。四个都不对再深挖。

模式四:前端 / API 契约#

典型症状:API 重定向导致功能瘫痪、页面渲染异常、字段对不上。

常见根因:

  • API 尾部斜杠 / 大小写不宽容,重定向把请求带飞
  • 单体 HTML 里函数重复定义互相覆盖
  • 前端改了字段名,后端没同步

通用修复思路:API 对输入宽容(尾部斜杠、大小写);前端改完跑全功能回归,不只测改的那一页。

模式五:数据管道#

典型症状:数据在链路里”变了样”,源头没问题、结果不对。

核心认知:数据从源头到页面经过多个阶段,每个阶段都可能引入偏差——拉取不全、解析断字段、清洗边界错、计算重复、渲染不匹配。

通用修复思路:管道逐阶段加检查点(详见数据管道的六阶段验证),让问题当场暴露在哪一段,而不是最后才知道。

模式六:对象存在 ≠ 功能可用#

典型症状:配置”看起来都在”,服务”看着活着”,但用户路径就是不通。

常见根因:

  • 路由对象存在但实际不可达
  • 进程存活但功能已挂
  • 映射条目在但读不了数据

通用修复思路:任何状态判断都验证最终用户路径(真实读取、真实连接),而不是只看对象 / 进程 / 配置存在。

调试通用流程#

识别出模式后,调试本身也有固定流程:

复现 → 确认不是环境/配置问题 → 二分定位到最少代码行 → 加日志看中间状态
→ 查历史(有没有同类 bug 记录过)→ 最小改动修复 → 写测试防回归 → 记录沉淀

其中两条最容易被跳过:二分定位(一次改一堆再试是浪费)和查历史(大概率有人踩过,先搜再动手)。

结论#

bug 是模式,不是事件。

遇到 bug 先归类——是编码、计算、环境、契约、管道、还是状态判断?归到类,修复思路就出来了。再对照通用调试流程走一遍,基本都能落。

把 bug 沉淀成模式库,比记住”这个 bug 怎么修”值钱得多——因为模式能迁移到下一个项目。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
从 20 多个 bug 里归纳出的 6 类调试模式
https://heaven-1314.github.io/posts/bug-patterns-catalog/
作者
赵培州
发布于
2026-08-05
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
赵培州
AI 应用研发工程师 · 用 Agent 做默认交付
公告
记录 AI 应用落地实践与踩坑经验,欢迎交流。
分类
标签
最新动态
站点统计
文章
32
分类
9
标签
81
总字数
41,808
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0