我们在游戏中需要一个健壮的引擎,那怎样才能保证引擎的健壮性呢?主要有两个方面:一个是尽可能的减少bug,二是在bug发生后能尽早的发现并解决。GB引擎和大多数引擎一样,有自己的一套保护机制。包括断言,日志模块和debug模块。
一 断言
断言的使用,能够让开发人员在最短的时间内看到问题所在,一般情况下断言只在debug模式下有用。在release模式下,我们可以把错误信息记录在log中。这时候我们就需要重新定义assert,最简单的是定义一个宏。在GB中,assert相关的宏都定义在asserts.h中。EE_DISABLE_ASSERTS宏用来控制是否启用断言,EE_ENABLE_RELEASE_ASSERT用来控制是否在release模式下启用断言,一般情况下是不主张在release模式下启用断言的。在GB中提供三种断言方式:EE_ASSERT_xxx, EE_VERIFY_xxx and EE_FAIL_xxx. 第一种在debug模式下用,第二种在release模式下使用,最后一种是在检测失败条件下用。
二 日志
日志系统在一个游戏引擎中是必不可少的一部分,我们构建一个日志模块最重要的目的是了解整个引擎的运行情况。首先我们必须清楚哪些东西应该记录在日志中,总体来说日志记录的信息可以按高,中,低三个级别来分。高级别的信息包括引擎的错误信息,例如我们通过try catch获得的崩溃信息,通常都是一些致命性的错误,例如数组越界,内存访问失败,内存泄漏等。中级的指一些非致命性的错误,例如数据加载失败,网络连接失败,文件打开失败等。低级别的就包括一些运行提示信息。当然我们也可以根据需要把等级分的更细一些,GB中就把log的级别分成了8个级别。根据不同的级别我们可以进行不同的处理,一般情况下是把不同种类的log信息放在不同的文件中,导致引擎崩溃的log信息最好是能够通过网络发送到某个数据库中,这样对于我们查找游戏的错误是很有利的。