NetLogo中怎么调试,找错误,debug

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文档由netlogo爱好者编,如有不足,请见谅!
很多用过别的编程语言的,都有很好的IDE(集成开发环:integrated development environment),一般都有很强大的Debug功能,设置断点,查看变量值变化都是轻轻松松的事情。

但是NetLogo调试设置断点这个功能都没有,包括最新发布的NetLogo6.0 beta都没有这个功能(PS 6.0beta版本功能未完善,下载需谨慎;其实看完这篇文章,你有可能会觉得没有这个功能是正常的)。

下面就和大家分享一下我的Debug方法。

先看个例子:
界面如上所示,代码如下:
模型大体意思:先通过setup生成10个海龟,位置随意,海龟有个属性值value。

然后在go里我们要求海龟每次前行一步(fd 1)之前先右转左转一个随机数,然后使海龟的属性值value加上一个10以内的随机值(random 10)
现在我们要监控海龟value的变化
监控变量方法一:
使用show,print,write等原语把需要监控的变量输出到命令中心来看。

我一般都用show,能输出自己想要的字符串。

1.直接在go里面加show value
运行一下,看看命令中心的结果:
每一个海龟(注释:如第一个turtle 6,指的是who为6的海龟,who是什么就自己查一下手册吧)对应的value值都输出了,是不是很开心呢?
2.假设我又给海龟增加一个属性,叫做income吧。

在这里添加:
然后我把income和value一起输出:
来看看命令中心的结果(看结果前,先清除先前的输出数据,“清除”按钮在命令中心的右上角)
这回惨了,输出都是数字,不知道value和income 对应的是哪一个值了,怎么办呢?好忧伤……
这个时候你就应该用word这个原语了。

只要我们将show和word结合使用,输出的前面加个标志就可以了,像这样:
输出的值前面都有个名称标志了:
假如你想知道是哪一个ticks对应的输出呢?那不是轻轻松松的吗,在word里增加ticks 一起输出就是啦!
结果是不是就是你想要的呢?
当然你为了简便,也可以将这两句话合成一句话:
结果
要是你嫌弃输出太多,你又可以增加过滤条件来减少输出:比如只输出收入大于150的
输出结果
监控变量方法二:
这种方法我不常用,因为记录不能输出,不能查看,会被实时更新掉,但是你一步一步运行的话还是可以的,那就是使用label原语。

然后到界面上去看看效果:
字体大小可以在设置里调整。

监控变量方法三:
使用自带的数据监视器
监视who 为1 的value
结果(你也可以考虑换个好看点的名字):
知道了每个变量的值,你就可以自己去看看有没有错误了。

总结(一):使用show输出灵活方便,想怎么输出怎么输出,我的世界我做主,还有记录可以查看对比,亦可以增加判断过滤条件,选择性输出。

要是label和监控器,只适合少量数据对比查看。

上面讲的都是怎么监控变量,下面接着讲怎么解决提示的错误:
提示错误麻烦的是找到错在哪里?解决方法就是先翻译提示的错误,清楚提示的是什么错误,知道了什么错误,你要给你提示,你都看不懂,那就白搭了。

你就可以自己去查这个到底是怎么解决的。

比如,还是那个例子
我在go里增加了一句话,set color red。

大家都知道color是海龟或者链特有的属性(查看手册,对应的符号标志,就可以清楚的知道原语是属于什么类型的)
而go整个执行主体我设置的是observer,然后他就提示我:“You can’t use tick in a
turtle/link context, because tick is observer-only”。

细心的人会注意到,我tick是早就加上去的,新加上去的一句话是set color red。

那为什么会提示是tick出错呢?这个问题很简单,程序在go编译的时候,他检查到set color red的时候,由于编译还没有完成,根据上下文语境,就认为是turtle context 了,然后又遇到tick 这个只能在observer环境用的原语,所以就报错了。

解决这种错误的方法就是排除法,排除明显正确的,找到错误。

明确的知道自己添加了哪一句代码造成错误。

比如例子中明显是新增了set color red造成的错误,而不是tick。

那我们把set color red 放到ask turtles 里面就可以啦!刚开始学的时候,我就是这样一句话一句话先找到运行对的,然后一句话一句话慢慢添加,就知道知道错在哪里了(但是有时候复杂的情况这个方法有可能不适用,可以说90%的情况下都可以用这种方法)。

对于有的人,解决错误真的是很困难的问题,所以我也有意收集了各种常见的提示错误放到我的论坛里,相关帖子:logo.club/topic/5733e1509e3f2a2a018ae818,也欢迎大家发帖或者给我反馈各种错误,我会及时的更新,现在收集的错误都是来自NetLogo初学者qq群。

需要项目合作的可以加我qq:2763035721
或者有疑问加我qq 群:530305942
如果你觉得对你有用,欢迎请分享者一杯咖啡!。

相关文档
最新文档