前言
某一天,我想要安装个连点器来实现游戏的自动化操作,于是,我在浏览器里搜索了连点器,经过一些时间之后,我找到一个金舟的免费下载的连点器,在安装了这个免费下载的连点器之后,我打开一看,界面做的是挺精致。
但在我使用了一会这个连点器之后,我呢,却发现了一些粗心的程序员们未曾测试到的bug,其中,让我有印象的有这样的几个特殊bug,它们有的让我体会到了程序员们不该出现的粗心,也有的让我体会到了程序员们修复bug时的艰辛。
1. 对话框悬停bug
在我刚开始测试的时候,这个bug就是我第一次测试到的bug,也是我印象最深的一个bug。就像这样。
而这个bug触发的原理也是这样的的:
- 试着直接退出程序
- 弹出窗口后拉宽或拉高主窗口
- 把窗口以步骤2的方式拖到外面后,对话框悬停bug就出发了
这个bug呢,触发的原因很简单,就是程序员们在实现退出程序后让用户留住的功能时,虽然记得要把软件的窗口的位置给固定住,但是,因为他们粗心地不小心忘了这一件事——设置窗口的固定大小,所以,就会导致这个不该出现的bug的出现。
2.1. “x”号无用bug
再接着呢,就是我认为的可能对用户的体验良性的一个bug——“x”号无用bug。 这个bug呢,主要就是不能点击窗口的“x”号,那为什么对用户的体验来说特别的良性呢?因为这样就可以让用户防止被这个软件给烦死,节省了一点时间。这个bug的是这样触发的:
- 点击上面除这四个按钮
外的任意一个按钮
- 点击任务栏该软件中的“x”
此时,你大概会看到这样的弹窗。
其中,外边虽然有黑边,但是实际上是没有的,不用管,其它的也是。 主要讲的,就是右上角的“x”和下边的“关闭客户端”按钮和白边。 “x”号呢,点不了了,因为没有定义;白边呢,因为程序中定义的的画家对象在画图像的时候由于图像太小,只有“关闭客户端”按钮能按,因为“关闭客户端”按钮本身就能按。 那么,这个bug到底是怎么实现的呢?这个问题我们等到下面再去解决。
2.2.bug的实现
首先,我们先要知道这个软件在触发bug的情况下是怎样显示上面窗口的。
flowchart TD
a([系统检测用户想关闭窗口])-->c[UI与画家对象画的全部清空]-->d[在退出页上更新UI]-->e[窗口转到加载页]-->f[显示窗口]-->b[/新建一个画家对象/]-->g[让新建的画家对象在窗口上的退出页上画]-->|等待一下|h[窗口转到退出页]-->z([执行完毕])
subgraph 加载中
c & d & e & f & g & b
end
subgraph 加载后
h
end
然后,我们知道了触发bug的伪代码,就可以通过为代码中的一系列线索借此找出bug出现的位置。
- “窗口转到加载页”后面的都没问题,因为都不跟bug有关,排除
- “UI与画家对象画的全部清空”前面的都没问题,因为也不跟bug有关,排除
由此,我们可以知道,bug在“在退出页上更新UI”那里。因此,我们可以联想到,“x”号或许被“UI与画家对象画的全部清空”给销毁了。亦或是“x”号销毁之后却创建失败了,可能至少就有这2种。
接着,如果bug出现的原因是“x”号销毁之后却创建失败了,那么,这大多数时候是不可能的,因为“x”号是一个
QPushButton对象,QPushButton很容易创建,因此也不容易出这样bug。
所以,原因只有一个,就是“x”号或许被“UI与画家对象画的全部清空”给销毁了,要解决它,只需要在“UI与画家对象画的全部清空”的时候不让“x”号销毁,就行。
3. 其它bug
关于其它的bug呢,我这里给出一个小总结——都是关于UI的不得出现的bug,比如,提示信息错误,时间错误等,这些错误修起来也很简单,修好的话就正常一些,他们却不修,我也没法管他们。
总结
这些bug呢,全相当于当今大牛程序员们的一张张小时候的照片,它们展示出了程序员们的烦恼,也展示出了程序员们的粗心,还展示了程序员们的不解。 虽然以前的时光令人羞耻,但,如果你还不努力的继续学习的话,就像那个免费下载的连点器一样,难修复bug不会修,易修复bug不想修,那么等待你的,也就只有更令人羞耻的时光,更令人羞耻的笑话。 而现在年纪尚早的程序员们,请我们一起努力,一起拼搏,一起锻炼,一起来争得未来的好时光吧!
下篇预告
你能像大牛一样用shell完成N次递归吗?