调试

来自Botzone Wiki
跳转至: 导航搜索

Botzone提供了比较完整的调试功能。

调试程序时请不要使用快速人机对局,因为它使用你的浏览器运行程序,表现可能与实际运行有所不同。

Windows 用户的本地调试

此处有 zhouhy 开发的本地调试工具:(目前为测试版,可能会有很多bug) https://github.com/zhouhaoyu/botzone-local-runner/releases

查看对局Log

对于Botzone的每场对局,网站在回放时都会同时提供Log。在右下角有“调试模式”的按钮,点击即可打开调试工具栏,可以看到自己和其他玩家(如Bot)的交互过程,也可以点击最右侧的按钮,查询完整Log。

每个Bot的程序每回合收到的输入都是单行紧凑显示玩家输入

Bot可以输出调试信息,只需要在输出的JSON对象上增加debug字段(Bot#交互格式)即可。在Log中,你可以通过观察Bot输出的JSON对象来得到Bot输出的调试信息。

继承某场对局

当你希望从某场已经结束的对局中继承参加者,或者从某个回合开始新对局(即“下残局”)的时候,你可以打开调试模式,然后点击右侧的“从本回合创建游戏桌”按钮。

新的对局可以更换参加者。

通过这个功能,你可以比较相同局面下不同Bot的应对策略,也可以对自己的Bot进行同一局面下的测试等。

如果参与对局的AI依赖于自己上回合存储的数据(Bot#交互格式的data),那么可能表现与实际不同。

本地调试

本地调试C++程序

使用简单交互的程序直接使用传统的调试方法即可。不用参考以下步骤。

如果想要在本地调试C++程序,那么请下载JSONCPP

下载后,直接解压到自己的程序文件夹,使得json文件夹和jsoncpp.cpp和自己的代码文件在同一文件夹下。请不要将cpp加入工程。

编译之后,你就可以将单行的玩家输入复制到自己的程序中了。如果回车后无反应,请输入Ctrl+Z然后再回车。


常见问题

Python 程序输出为空怎么办?

可以检查下print之后是不是使用了os._exit,请改成sys.exit,否则输出的内容是没来得及被保存的。

Python 有好几个文件想上传怎么办?

请参考: 此链接

简单来说,就是把python文件打包成zip,并在zip根目录额外包含一个__main__.py作为入口点,然后上传整个zip作为python源码。

超时了怎么办?

你的程序每回合在平台上运行是有时间限制的,具体可以参考Bot#资源和时间限制

你可以#查看对局Log,选择“查看完整Log”,然后从最后往上翻,可以看到自己TLE的实际运行时间,如图:

Debug-TLE.png

如果你的程序超时,请尝试进行卡时,比如在每次迭代/循环时,通过clock()或者time()函数来判断程序运行了多久,从而决定是否提前返回。

崩溃了/输出和本地不一样怎么办?

你的程序在平台上经过 -O2 优化,可能会暴露出数组越界、地址越界、除零、未初始化等问题。建议仔细检查自己的代码。