那些年我们de过的bug(1)

简介: 在我的编程经历中,遭遇了无数的 bug。打算挑一些我还能想起来的且不那么低级的,跟大家分享一下。今天先抛个砖。也欢迎大家分享你遇到的奇葩 bug。


有人说,别把兴趣当做职业,因为职业会毁了兴趣。然而,对于众多对编程充满兴趣的 coder 来说,这恐怕没太多选择。从你成为一名程序员开始,你就不得不去面对需求、文档、用户、产品经理,以及永无止境的 bug。


在我的编程经历中,遭遇了无数的 bug。打算挑一些我还能想起来的且不那么低级的,跟大家分享一下。今天先抛个砖。也欢迎大家分享你遇到的奇葩 bug。


我目前所做的项目是手机游戏,后台是用 django。之前有这样一个需求:


假设已上线客户端 v1.0


配套服务器 server 1/2/3 都是 v1.0


一个游戏的新版本 v1.1 发布后,要提交给不同的渠道审核,审核通过后,他们会在平台上更新客户端至 v1.1。但在这审核的过程中,要保证审核人员连接到 v1.1 的新版测试服务器 server 0,而不影响真实玩家的老版本 v1.0 去连接老服务器 server 1/2/3。当审核通过后,则需要停服更新老版本服务器至 v1.1,之后新版本就连接到更新后的 server 1/2/3。


另外要注意的是,不同渠道的审核上线速度有可能不一致,所以需要能分开控制。


当时为了临时应对这样的需求,就在获取游戏可连接服务器列表的地方增加了这样一个配置:



/

TEST_CHANNEL = ('appstore', 'pp', 'ky', '91')
TEST_VERSION = '1.1'
TEST_SERVER_ID = 0


获取列表的请求里增加了一个判断:



/

if version == settings.TEST_VERSION and channel in settings.TEST_CHANNEL:
server_ids = [settings.TEST_SERVER_ID]
else:
...


解释一下,比如现在游戏在苹果appstore、PP助手、快用助手、91助手4个渠道等待审核。那么这几个渠道的 v1.1 版本在请求服务器列表的时候,就会拿到一个只有测试服 server 0 的列表。等到审核完毕,只要在配置里把对应渠道去掉即可获取正式的服务器列表。


为了防止对 TEST_CHANNEL 的改动,这里特意使用了 tuple。到这一步,其实并没有什么问题。


等到PP、快用、91都审核完毕决定上线的时候,配置被改成了:


TEST_CHANNEL = ('appstore')
TEST_VERSION = '1.1'
TEST_SERVER_ID = 0


然而,一会儿之后就接到反馈说,PP 的版本看到的仍然是测试服务器,请转到正式服。


我的第一反应是,难道服务器没有重启或者新的配置文件没有其效果?但是再次重启刷新之后,仍然没有效果。而同时被修改的快用和91则一切正常。


这真是奇了怪了。


各位先别急着往下翻。你们想一下会是什么问题?原因就在上面的这几行代码中。


...


...


...


...


...


...


...


...


TEST_CHANNEL = ('appstore')


bug就在这里。


(a, b) 是一个 tuple 类型,而当 tuple 类型只有一个元素的时候,需要写成 (a,)。否则,它就只是一个括号运算符。a 和 (a) 是等价的。


因此,条件


'pp' in ('appstore')


就相当于


'pp' in 'appstore'


它不再是判断一个字符串是否存在于一个序列中,而是一个字符串是否包含在另一个字符串中。'pp' in 'appstore' 的结果又恰好是 True……


所以,正确的写法应该是:


TEST_CHANNEL = ('appstore',)


建议今后养成好习惯,所有序列的元素后面都加上『,』,避免出错。



多余的话:只要你还在写代码,bug 将会一直存在。从某种角度来说,bug 也反映了你的编程水平。当你已经很少犯写错变量名、用错语法等初级错误,而更多出现诡异地、难以调试的 bug 时,说明你已经进步了。而解决 bug 的过程也是经验增长的重要过程。所以说,不要畏惧 bug,要拥抱 bug。



bug 是程序员的好朋友,但产品经理不是。

相关文章
|
20天前
|
Java
记一个 Base64 有关的 Bug
了解一下,下一次用 Java 开发 Base64 有关的逻辑的时候注意绕过。
42 2
|
6月前
|
Shell Python
使用Python IDLE进行Debug调试
使用Python IDLE进行Debug调试
95 3
|
JSON 数据格式 C++
VS Code debug调试时无法查看变量内容【已解决】
VS Code debug调试时无法查看变量内容【已解决】
VS Code debug调试时无法查看变量内容【已解决】
|
SQL 数据库 数据安全/隐私保护
|
编译器 C++
devc++ 问题小总结
devc++ 问题小总结
361 0
|
程序员
IDEA上Debug调试全流程
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍。
192 0
【学习笔记】【Idea】Debug调试
想要调试代码,一定要保证代码的正确执行。 因此,需要设置有一个程序代码的启动程序类。 范例:编写程序类进行类功能的调用
100 0
【学习笔记】【Idea】Debug调试
|
存储
汇编实验一 DEBUG调试工具的使用
一、实验目的 1.学习使用DEBUG程序的各种命令。 2.了解计算机取指令、执行指令的工作过程。 3.掌握用DEBUG调试工具自编程序的方法。
377 0
汇编实验一 DEBUG调试工具的使用
Gradle 插件Debug调试
1 建立远程调试任务 image.png image.png image.png 2 在项目中的terminal命令行中 gradle assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true assembleDebug 可以为其他的构建命令,但参数-Dorg.gradle.daemon=false -Dorg.gradle.debug=true要有。
2383 0