技术交流|逮住一个奇葩的bug
3614
2022.02.09
2022.02.10
发布于 未知归属地

今天又让我逮住一个bug。刚修复十分钟。我觉得可以单独开一篇。
有想体验修bug快感的,私聊。

这个工具不是啥小服务,估计几百万用户打底,全国统一的那种。为啥拿出来呢?因为不是啥恶性bug。
老妈是会计,安装一个全国通用的软件的时候一不小心选错省了。(我也不知道他为啥选错了省)
步骤是:安装 -- 选择省 -- 输入XXX识别号。
然后我老妈输入识别号的时候,提示:这个识别号不存在。
重新安装,发现:省是灰色的,无法选择。

这种屎山代码我懒得理,稍微整理一下代码逻辑即可:(之前在一个C#的代码里面看到过类似的逻辑)

// 如果系统里面有类似provice.log的配置文件,那么直接读取
if exist:
    //直接读取出来XX省
// 如果没有读取,那么就确认是新用户,提示可以选择省
else:
    // 出来一个弹窗让用户选择省

然后我老妈选错了。咋办呢?这个代码就一直错下去了?省直接是灰色的,不让选择……
我直接绷不住了。

  1. 如果我是程序的开发人员,那么我直接删除掉provice.log,可是你给用户说:你去安装路径下找XX文件删除即可。用户肯定是听不懂的。
  2. 卸载重装

本人昨天刚说的:安装framework4.0需要卸载重装,你这个也是兄弟级别,你们两个系统开发互相之间交流下开发经验呗。


我妈过去问维护人员,维护人员说:这个需要在控制面板卸载,然后在根目录删除
我顿时闻到一股不妙的气息:按照你的说法,你们自己的卸载工具还卸不干净咋地?真不至于……

我也找不到配置文件,照着做吧。控制面板删除。
删除完成以后重装,还是灰色的。
wc还真的卸载不干净啊??你们咋做的功能??


继续排查:第一次是好的,卸载完成以后重装应该和第一次一样可以选择,那么就是卸载不干净,留了配置文件在本地。

开始找安装路径,打开一看:
文件都删除了,文件夹一个不剩全留着呢。

手起刀落删除,删除一半提示类似下面这个:
图片.png

????哥们,这不合适。我都把你卸载了你还给我留注册表留服务???

抱怨归抱怨,远程指挥(我是用QQ给老妈修这个问题的):重启一下电脑。
程序被占用当然删除不了了。


电脑重启以后,还是无法删除。还是提示文件被占用!
排查:这个服务还开机自启!!!
程序起来再开服务不行吗?做个守护进程能咋滴?

本人直接开任务管理器强行删除。
是这个样子的:如果找到无法删除的文件,会提示你被XX服务占用,我找进程没找到,在服务里面找到了。把服务停了。

图片.png

找到了以后,杀服务。杀完服务就可以卸载了。
bug修复完成,花费20分钟。


简单描述一下系统出了啥问题:

  1. 每个省的数据不通用,导致用户查询不到。这个可以理解。
  2. 选择省以后会把配置文件写入到系统里面,下次直接取得。可是有的用户一不小心选错了就只能卸载,这是架构的问题。
  3. 这个软件会给系统注册一个服务,而这个服务设计为开机自启,导致无法正常删除——除非停服务才能够删除
  4. 卸载的时候不先停服务,直接rm,所以删除失败(或者就没写删除文件夹的代码)
  5. 可能因为3、4的原因,导致卸载只能卸载一半。而代码可能直接把报错吃了提示卸载成功。(因为服务不停无法删除)而系统配置文件的删除顺序在这个位置后面,所以无法删除。嗅出一股屎山的气息

解决方案:

  1. 如果在选择省的时候选择错误,那么可以杀一只程序员祭天。
  2. 卸载之前必须从注册表停服务,不然会卸载一半,所以需要先停服务后卸载。

外加一个故事:

很久之前遇见一个问题,那就是代理崩溃。

大家都用过内外网,内网没法用百度,如果外网需要登陆内网的话,需要通过隧道机,而其中最常用的工具是:proxifier
proxifier这个工具是咋实现这个代理的,其实本质上是劫持。
啥意思呢?就是所有的端口往外传报文的时候,必须我proxifier同意才能发,而且我proxifier还可以修改报文内容。至于windows为啥同意这种危险的操作,鬼知道用了啥黑魔法。

很久之前,我们有个开发也是去了另外一个省(我忘了,可能是东三省),安装了一个实现代理的功能。安装了以后,proxifier劫持不了了。
看来这个开发手也很黑。

proxifier:发报文的时候,必须我proxifier同意才能发,而且我proxifier还可以修改报文内容。经过开发一顿越权操作把最高权限拿走了,proxifier拿不到最高权限代理不了了。
一群开发坐在一起:为啥?咋回事?第一次听说?咋处理?这么神奇?

你问我为啥知道呢?因为本人用的是dbeaver:
图片.png

dbeaver这个proxifier也劫持不了……
我也因为这个事情问过dbeaver的github,他们说:我们有代理功能,所以请用这个,至于为啥proxifier用不了,我们不知道的。
大佬就是大佬,说话好听。

总之一句话:只要你去东三省跑一趟,安装一个神器的小工具,然后你的电脑以后就用不了proxifier了。
有人说:你卸载了啊?
看我之前那一篇就可以了,很多开发写进去只管写,恢复是不可能恢复的。鬼知道啥业务逻辑,难道真杀一只程序员祭天?

给我们开发功能的主程傻了。在我们部门坐了2天,啥都没干(登不上内网干啥啊)。
第三天,把电脑扔给总部重装系统。(我们公司有规定,不能私自重装系统,只能给总部重装系统)
第四天回来了。这才找了个没人的地方开发功能去了。

评论 (8)