Koodoo语言调试方法一览

蓝星际语音平台提供了很多灵活的调试方法,Koodoo语言也内建了多种调试机制,可以调试复杂的脚本流程。

1.单步执行

在开发平台,脚本编译成功后,可选择“单步执行”,一步步地调试脚本流程。没执行一条语句,流程就会暂时停顿下来, 变量列表的值也会全部更新。这样就可以可视化地跟踪流程的走向。

2.断点调试

单步执行固然方便,但每一条语句就要点击一次“单步执行”按钮,有时候也实在是烦琐。更好的方法是在要调试的地方设置 断点,然后点击“运行”,脚本流程跑到断点处就会停下来,这时候可以查看变量内容,或再进行单步执行,逐步跟踪。

不仅仅在开发平台,运行平台也可打开超级调试器,进行断点设置和跟踪。

断点可以设置在流程树的任意位置,子函数内也可以设置断点。可以设置多个断点,断点的数量没有限制。

3.断言

流程执行到断点处一定会停顿下来,有时候希望满足某种条件才停下来,这就要用到2.0版本新增的断言函数。这是一个Koodoo 语言内建的调试工具,可以编写“防范式”的代码,比如可以看执行前的条件是否合乎预期,在执行后的结果是否正确等, 可以实现某种自动化的测试。

断言的语法是:

Assert(表达式);

断言从字面上理解是脚本的编写者认为这时候应该如此,如果表示式不符合断言,也就是表达式为假,就应该停下来看怎么回事。

注意Koodoo语言和C语言一样,没有专门的bool变量,最终表达式的结果会转换为整型,0就是假,非0就是真。

如果断言不成立,在开发平台环境或运行平台的测试模式下,会弹出提示框,然后自动进入单步模式;在正常的运行平台环境下,则会自动记录一条系统日志, 对流程的执行没有实际的影响。

如果断言成立,则什么也不干,相当于一条空语句。

4.显示栏目信息

无论是开发平台还是运行平台,系统都给每条线路提供了3个栏目来显示运行时刻信息,Koodoo语言提供了显示信息的函数:

DispInfo(iCol, vInfo); 参数iCol表示选择3个栏目中的哪一个,取值范围是0-2。

这样很直观,而且对程序的流程没有什么影响。当然,因为只能显示当前的信息,如果要记录历史信息,那就可以采用 下面的日志函数了。

5.记录日志

让流程停顿下来的方法固然是直观,但在多线路并发运行的情况下,调试的最好办法还是记录关键部位的日志。

Koodoo语言提供了很方便的日志函数:

TextFileAppend(sFile, sText, ctrl);

第一个参数是文件名,第二个参数是要记录的内容,可以是任意类型的表达式,第三个参数可以控制日志的格式:

0-原样写入,1-在后面加入换行,2-在前面加入日期时间并在后面加入换行,3-在前面加入日期时间和线路号并在后面加入换行

一般选择3,这样在每条日志的前面都会记录下精确到毫秒级的时间戳,可以方便地对问题进行跟踪。

语音平台自身也会记录日志,我们称之为系统日志,通过BsTelRun.cfg里面的配置项可以控制系统日志的存放位置和文件名,以及日志记录的详细程度。

数据库访问也可以记录日志,是通过DbOpen()的第5个参数来指定日志的文件名。也可以用DbSetDebug()来控制数据库日志的详细程度。

以上方法各有擅长,开发者可以根据需要灵活采用。

bluesen 2008.4 于深圳, 2008.11修改