问题描述
这两天在添加一些踢球的参数,我的习惯是边添加边测试,观察该动作是否能正常展现出来。今天本来想着很快就搞完了,因为前两天添加的时候都非常顺利,测试也很顺利。但是没想到今天测试的第一个动作就出现了问题:运行脚本后球场不出现机器人,终端也没有明显的报错,类似于闪退。(运行结果如下图)
如上图所示,在打印出红线的内容后这个进程就结束了,球场也没有机器人出现。
我猜测有以下一个原因:
- 由于参数太多导致加载的时候进程崩溃(此次添加的新动作很多,是之前的好几倍)
- 关于添加参数时要修改的文件出错(header.cc, header.h, kicking.cc, naobehaviour.cc, .skl文件) 较大可能
- 参数本身就有问题 包括但不限于参数格式错误和某一数据出错
接着我开始一一排除错误
-
因为如果真的是参数太多导致的加载时进程崩溃,那么工作量就有些大,此外考虑到此次添加的参数是之前参考ut论文的一种方案搞出来的,所以如果是这样的话当年ut那套代码里面的动作参数肯定也不会少,因此我只对第一种可能性先进行了简单验证:把所有参数都添加完之后,测试 昨天加的参数能否正常运行,结果能正常运行;接着我把今天出问题的参数单独拎出来一个放在一个参数较少的源代码里面单独测试,结果不能运行,问题复现。由此第一种可能基本被排除。
-
接着我想知道是不是今天添加的所有参数均无法正常运行,因此我测试了t0,t1,t4三种类型机器人的其他结果距离的参数,结果发现6~9米的参数均无法运行,而10-14米的参数均能够正常运行,由此也基本排除了那些被修改的文件可能出现的错误(因为我在修改的时候是批量修改,如果出错应该全部都会出错)
-
现在就只剩下参数本身的问题。去观察添加的参数发现果然有问题:最后一个参数出现了一个key对应两个value的问题,因此我想应该是这里导致加载的时候出错,因此我把所有这些出错的地方都改过来之后再次进行了测试
-
结果还是不行,我再次检查是不是因为参数格式有问题,因为这个参数文件要求key和value之间必须是一个‘\t’。检查之后发现确实没问题,但有一个疑问之处,就是其他参数的key和value之间的tab符在移动光标的时候是直接跳过的,而最后一个参数的tab键(我直接用键盘打出来的,其他参数是用python脚本直接生成的)显示的是三个空格。由此我推断问题应该就是出现在这里了
-
在用生成固定格式的python脚本重新生成参数后再次进行测试,问题得到解决。
总结
这次问题应该就是出在不同类型的编辑器对空格和制表符的解释是不同的,而且这种不同在python语言中是严格区分的。也就是说在这里不能单纯的把制表符当成4个或者8个空格这样来看。