你的游戏代码“病”了吗?

代码作为游戏的“身体”,一旦生病,在“奔跑”过程中便极可能”跌倒”。如果你的游戏出现过运行错误、宕机偶现问题,或者某些功能与预期不符。那么一起来看看是不是你的游戏代码”病“了吧!

先来看两个病发现场:

代码“生病”带来的影响不仅仅是服务器宕机,还涉及到服务器和客户端的任何有代码运行的地方。那么常见的代码病症有哪些呢?经过有效统计,我们可以看到主要的四类常见代码“疾病”:

1. 空指针

那么,这么多病症是怎么引起的呢?我们先来看看最大的“空指针”问题。空指针就像是“感冒”,极其容易感染。谈起空指针,我们就要先来看一下,什么是指针。

那么,空指针又是什么呢?

空指针可能带来各类不可预知的游戏崩溃等问题。为了不让代码感染“空指针”,在代码编写的时候可以做一些“预防”措施。

2.野指针

空指针预防了,野指针又来了。野指针又是一种什么病呢?简单点说,当指针指向内存归属交由系统控制了,该指针就成为了野指针。野指针就像是“发烧”,一旦“高烧”,整个代码“身体”将不受控制,甚至出现错乱。

野指针究竟是怎么形成的呢?来看一个实例:

野指针可能会带来宕机、数据错乱等问题,而且不易被发现。如此一来,在代码编写时一定要有预防措施。

3.越界和移除

还有两种“疾病”是越界和溢出。通俗来讲,越界就是代码“身体”吃错了东西,而溢出则是东西吃多了。来看两个场景。

越界和溢出的危害也不小。越界就像东西吃错了,可能会导致身体不适,但很难被觉察。当吃的东西与“身体”产生冲突时,则会产生“食物中毒”(程序崩溃)。

而溢出就像吃多了,给身体增加了错误有害的“物质“,产生的影响可能会瞬间出现”急性肠胃炎“(代码报错),也可能在之后才出现“脂肪肝”等慢性病(在使用到受影响模块时才出现问题)。

预防越界和溢出,要控制住身体不“乱吃东西”,良好的“饮食习惯”是保证身体健康的重要前提。

4.未初始化

还有一种病叫做未初始化。这种病就像“过敏”,当代码“身体”摄入了“未知物质”时,就会出现排斥和异常。这种病可能只会产生小的异常反应,但当摄入物质影响到核心机能时,可能会出现“休克”甚至危及生命(宕机)。

首先,来看一下什么是初始化和未初始化。

那么,常见的“过敏源”有哪一些呢,来看看未初始化的分类。

针对常见的过敏源,来看看有哪些预防措施吧。

这么多的代码“病症”,我们建议采取“预防为主”的手段。通过体系化和针对性治疗,针对开发环节的不同阶段应用不同的方案,对代码进行“病症”扫描。

目前,WeTest质量开放平台已推出代码检查功能,扫描代码常见“病症”,助您打造健康游戏!

原文发布于微信公众号 - 腾讯WeTest(TencentWeTest)

原文发表时间:2015-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏章鱼的慢慢技术路

2017年第八届蓝桥杯C/C++B组省赛题目解析

40750
来自专栏令仔很忙

面向对象

在面向对象编程出现之前,几乎所有的程序都是以面向过程为中心的,程序的运行从某个地方开始运行达到一定的目的就结束了。而且程序的代码修改和重复使用率比较低。面向...

11720
来自专栏三木的博客

Kobject浅析

面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel...

23980
来自专栏Android机动车

Java 基础(一)——重新理解面向对象

如何利用对象完成真正有用的工作呢?必须有一种办法能向对象发出请求,令其做一些实际的事情。接口就是对一个对象的行为进行规范,使对象具有做某些事情的能力。

8110
来自专栏Java面试笔试题

简述一下面向对象的”六原则一法则”

13220
来自专栏圣杰的专栏

DDD理论学习系列(7)-- 值对象

? 1.引言 提到值对象,我们可能立马就想到值类型和引用类型。而在C#中,值类型的代表是strut和enum,引用类型的代表是class、interface、...

30370
来自专栏玄魂工作室

CTF实战30 CTF题目练习和讲解五(讲解部分)

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

22030
来自专栏算法channel

问答记录贴 1 | 解析 NumPy 的广播(broadcasting)机制

实践出真知,相互讨论碰撞出思想的火花。【原创互助答疑群】内有的问答很精彩。于是脑子里闪现出一个想法,为什么不把整个的问答过程记录总结下来,分享给更多的小伙伴呢?...

12710
来自专栏海说

晚期(运行期)优化

  即时编译器(Just In Time Compiler)为了提高执行效率将热点代码编译成与本地平台相关的机器码,并进行各种层次的优化的编译器。它并不是虚拟机...

21200
来自专栏深度学习计算机视觉

一万副扑克分牌问题

问题描述:给你一万副扑克(一共540000张乱序)和一万个人,请设计一种算法,能够有效的将一万副扑克都分出来,并且每一副牌都是按数字和花色排好序的。 总任务:将...

30340

扫码关注云+社区

领取腾讯云代金券