我曾遇到最大的一个bug
Bug从来不是个让人高兴的东西。然而也有例外,那就是当你弄明白了这个Bug的时候。本文讲就是我曾经遇到的一个最大的、至今仍未解决的 Bug的故事。
年青时,我曾经开发了一些魔兽世界的插件。那时候我除了 沉迷于这个游戏之外,还对开发游戏外挂非常感兴趣,你知道,那是一种非常上瘾的感觉,特别是当发现有新的公共API公布时,真是兴奋的不得了。 这样我也就有了巨大的动力去学习 Lua 语言了,它是个非常有意思的编程语言。
当时,我和我的一个朋友开发了一个叫做 FriendNet 的插件,这是个非常棒的插件。它能帮助我们在游戏中解决一个很大的麻烦: 找到你真正的朋友,防住探子。这个插件会把你游戏中的好友清单传送给你的所有朋友。反过来,也会取回他们的好友列表。最终,你的好友数量会不断增加,而且里面不会有探子。
你知道,插件API里绝对不会给你提供任何形式的网络交流通道的,所以,我们只好一种黑客注入方式来传送好友清单。 我们的做法是把这个清单序列化,通过在线游戏聊天室发给对方,用私语通知对方接收这些名单。
是的,现在大家都玩Facebook,但几年前我们就是通过这种地下方式在这个虚拟世界里扩展我们的社会关系网的。而且不亦乐乎。
毕竟,FriendNet还是有一些问题存在。P2P程序都是很难维护,每当你有Bug修复、版本升级时,你很难让所有的用户都立即升级他们的 程序。 于是出现了不同版本一起在线通信,导致了很多莫名其妙的事情出现,很难定位是那块出了问题。
其中有一个bug特别的让人困惑,难以确定:每隔几天,FriendNet就会出现一些不正常的信息,会导致这个插件的有些界面上一片混乱。我们收到了相当多的bug反馈,而且确信这个问题是真实存在的,但不管我们怎样的努力测试,总是不能复制这样的现象。这是个来自地狱的bug。最终我们放弃了,为了推托责任,我们就说这个问题是由于魔兽恶劣的API导致的。
如今我已经不玩魔兽世界好几年了,然而突然有一天我明白了这个问题是怎样产生的了。当明白了是什么地方的出来问题后,我意识到我们是被习惯性的 思维方式蒙蔽了。
你知道,你在游戏中扮演的人物在魔兽世界里是可以喝醉的。 当了喝了太多的烈酒后,你的屏幕开始变形,变模糊,而且你走路走不了直线。 同样,当你在聊天时敲入一段文字:
Penelope says: I'm so wasted
电脑会给你显示成:
Penelope says: I'm sho washted ...hic!
因为FriendNet是把所有的交流信息全部打包发送的,所以每当在群发的人中有喝醉的时,信息就会变成乱码。
FriendNet 已经在插件网站上消失很长时间了,估计你现在已经不能下载到它了。我怀疑也许它还能在现在的最新版的魔兽世界里使用。但我始终没有去修复这个bug,每当 我回想起这个事,我都会觉得非常有趣。