大小写引发的悲剧
我们知道,在Windows下是不区分大小写的,比如文件名,文件夹名,命令行参数以及注册表表项等等。这在提供我们方便的同时也把我们培养的不那么严谨,出错也就在所难免。
这是最近发生在我们公司的两个真实的案例。
1. Bin目录和bin目录
软件所有的DLL都是在Bin目录下的,有同事在fix一个defect的时候,需要判断某个DLL是否在这个Bin目录下,遗憾的是,这个判断他是用case sensitive的方式做出的,于是当目录名为bin而不是Bin时,该判断失败并在一系列后续操作后导致软件crash。而此时,软件的beta版本已经发布了。最后,我们只能以附加文档的方式告诉用户:如果发现这个问题,请强制把bin改为Bin。
2. /Install 和/install
我们有一个产品在安装时会调用一个命令进行注册:registerxxx.exe /install。但是该注册命令的实现中,对 /install这个命令行的判断却是case senstive的。于是,当我们安装包的制作人试图以首字母大写这种比较美观的方式调用此命令时:registerxxx.exe /Install,悲剧发生了。于是,我们只能在每次装完后自己手工注册~~~
习惯了windows下这种不区分大小写(case-insensitive)的工作方式,我们已经被培养的对大小写不敏感了。这样的问题相对来讲是比较难debug的:以至于眼睁睁的把问题行高亮在你面前,你也可能会视而不见 - 这本来就是对的嘛。是的,我们的经验给了我们这个十分自信的假设:大小写不同是没问题的。
福尔摩斯有句名言:There is nothing more deceptive than an obvious fact。没有比一个你所认为的事实更具有欺骗性的了。因为你错误的假设把它排除在了问题域之外,这成为了你意识的盲点。因此,很多时候在debug一个问题的时候,不要做任何假设,先站在一个比较宏观的角度检查一些基本的问题:插头插了吗?对象注册了吗?代码是最新的吗。。。大小写一致了吗?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述