跳到主要内容

模型调试

控制中心

建议

调试模型的关键之一是熟练使用控制中心。

功能

查看系统信息,使用调试工具

ModelDebugging_image1.png

基本用法

  • 查看信息

    • 点击运行控制条的警告错误图标会弹出控制中心窗口
    • 或者相关操作会触发自动弹出窗口,如变量的查找引用、模拟运行中出现错误等
  • 信息显示

    系统提示信息按上图的分类标题显示,各类信息的使用方法见下

  • 定位跳转

    在弹出的信息窗口鼠标点击高亮的符号或对象名称,会跳转聚焦到该对象

故障信息

ModelDebugging_image2.png

运行错误

  • 如上图红色区域部分,符号为红色"X",会显示在窗口最上方
  • 仅会在模型运行时发生,将导致运行中断
  • 以"错误内容-错误地点"方式显示
  • 错误堆栈信息
    • 顶部的运行错误内容(红色字体)的下方会显示调用堆栈信息,以"at"开头
    • 当错误对象被多层调用或触发时,每层显示为一行,分多行显示
    • 每行从左至右:按"对象名(所在流程,所属Agent个体)"格式显示
    • 多行从上至下:依次为更上一级的调用者
解释:上图的故障信息

运行错误:关于ay的计算公式中出现了除以0的错误

  • 错误位置在"access one neighbor's state" 组件(该组件在"Cac Force"流程,属于"Floy1"个体)
  • Ask组件调用了上述"Cac Force"流程(Ask在 "every tick to"流程, 属于"Floy" 种群观察者)
  • "every tick to"流程(在"Observer:Go" 流程内,属于"Floy" 种群观察者)

模型问题

  • "Cac. distance and acc"组件有以下问题
  • 未定义的空公式
  • ...

以上引号内的部分在图中均为高亮状态,鼠标点击可跳转到相应位置

模型问题

建模过程中随时可能出现,以"问题对象- 错误内容"格式显示,可以多行

  • 模型警告

    不会导致模拟中断或无法开始,符号为"!",如上图中"空公式"提示

  • 模型错误

    会导致模拟无法开始,符号为"X",如下图

ModelDebugging_image3.png

提示
  • 运行错误必须正确处理后模拟才能运行。
  • 模型错误会导致模型无法运行,必须正确处理后模拟才能开始。
  • 模型警告虽然不影响模型运行,但可能存在建模逻辑问题,例如无意中变量重名导致了读取对象错误,因此建议您及时关注和处理。

输出信息

ModelDebugging_image4.png

  • 用户定制的打印信息

    如上图第1行,是模型中的终止事件被触发后输出的"羊已灭绝"信息

  • 模拟完成后仍然残留在流程中的Trigger

    如上图第2行,"XX流程中残留2个Trigger"

断点信息

ModelDebugging_image5.png

基本

  • 显示

    模型中设置的所有调试断点,每行一个、分多行显示

  • 操作

    每行右侧有控制按钮,可以继续运行、禁用、和删除

说明
  • 上图中显示模型当前停止在第1个断点(名为"Cac. Distance and acc")的组件处。
  • 下方两个断点带有红点,表示启用中但未触发。

断点相关调用堆栈

  • 当某个断点被触发时(如上图模拟停在第1个断点),控制中心会增加调用堆栈信息标题栏

  • 点击堆栈标题,下方显示该断点位置调用的层级信息就是调用堆栈,如下图

    ModelDebugging_image6.png

  • 阅读和使用堆栈的方法与故障信息中介绍的完全一致

局部变量信息

  • 上述调用堆栈的下方会显示被选堆栈所在流程中所有局部变量的当前值,包括接口和临时变量
  • 可以选择调用堆栈不同层级("at"左侧单选钮),则下方的局部变量信息会随之切换到对应流程
  • 点击这些局部变量可以将画布视图聚焦并选择到该变量

引用信息

功能

查找数据对象引用

ModelDebugging_image7.png

  • 鼠标右键点击目标对象后弹出菜单,选择"查找引用",会自动升起控制中心窗口并显示"引用"标题栏
  • 其中列举所有使用该变量的公式和表达式所在的组件对象,点击即可跳转聚焦到该对象
提示
  • 举例:假设你发现一个全局变量状态异常,而该变量在模型多处被更改赋值,需要逐一检查。此时你可以使用查找引用快速遍历所有相关的公式位置,以及在模型对象目录树中搜索画布中被连接在流程端口的位置,因为这些位置都有可能更改赋值。
  • 注意数据对象的值并非仅可在公式或表达式中被修改或读取,图形建模本身也可以,如状态链传递了变量到输出端口、容器操作等,此时你可以使用模型对象树的搜索栏查找相关位置,如下图所示。

ModelDebugging_image8.png

  • 总结:需要查找某个数据对象在建模中的所有使用情况时,使用"查找引用"可以找到相关公式或表达式,使用模型对象目录树搜索可以找到画布中对象及其引用。

查找流程调用

ModelDebugging_image8+1.png

  • 鼠标右键点击目标流程对象后弹出菜单,选择"查找调用",会自动升起控制中心窗口并显示"引用"标题栏
  • 其中列举所有调用或请求调用当前流程的对象,点击即可跳转聚焦到该对象
提示

无论是查找变量引用还是流程调用,不仅支持从被指向的原型对象(右键菜单)查询,同时也支持从其中任意一个引用或调用对象查询所有的引用或调用对象。

调试断点

功能

流程步骤上设置后使得模拟运行Trigger流动抵达时暂停,并保持当前状态,用于Debug

使用方法

  • 断点设置在流程步骤

  • 运行机制

    当模型运行时Trigger抵达点断点位置,模拟会暂停(本组件尚未运行),以方便查看此时的系统状态

  • 创建断点

    鼠标右键点击流程步骤对象后,在菜单中选择设置断点,代表在该对象触发前暂停模拟运行

    ModelDebugging_image9.png

  • 显示样式

    设置对象左上角会出现红点标记,当运行到断点位置时系统会暂停,闪烁暂停符号

  • 查看信息

    当断点被触发时,点击控制中心的断点和断点堆栈标题将呈现详细的状态信息,你可以集中查看所有断点及当前停止状态,运行和删除断点,当前断点的调用堆栈——其中显示了断点所在流程的局部变量状态,详见前节“断点信息

  • 再运行

    鼠标悬浮暂停符号后变为运行按钮,点击它即再次运行,或者在控制中心的断点标题中点击运行按钮

    ModelDebugging_image12.png

  • 禁用断点

    鼠标右键菜单选择禁用,或点击控制中心的禁用按钮

    ModelDebugging_image13.png

  • 删除断点

    鼠标右键菜单选择删除,或在控制中心点击删除断点按钮,如上图

    提示

    如果删除的就是运行当前停止所在的端点,组件对象图标左上角依然有暂停符号闪烁,你需要再次点击该符号运行,当前断点就会消失。

案例

案例
  • 一个Loop流程在1个Tick内从1加到100,正常情况无法看到中间结果
  • 但你可以在网关上设置断点以观察每个循环轮次的中间结果,如下图

ModelDebugging_image14.png