Main Content

本页采用了机器翻译。点击此处可查看英文原文。

调试 Requirements Table 模块

自 R2023a 起

您可以在 Requirements Table模块中调试形式化需求。Requirements Table模块包含一些与 MATLAB® 编辑器中相同的调试工具。要使用调试器,请在至少一个需求上设置断点并运行仿真。当您创建和编辑需求时,Requirements Table模块还会检查错误的表格单元格。

向需求集添加断点

此示例使用 使用 Requirements Table 模块仿真骰子游戏规则 中的模型。要调试Requirements Table模块需求:

  1. 打开示例模型ReqTableDiceGame中的Requirements Table模块Dice Game Rules

    openExample('slrequirements/DiceGameReqTableBlockExample')
    open_system("ReqTableDiceGame/Dice Game Rules");

  2. 右键点击索引为 1 的需求,然后点击设置断点。需求在索引旁边显示断点图标

    This image shows the appearance of the breakpoint after you add it to the requirement with an index of 1. The breakpoint icon appears.

  3. 选择需求评估期间仿真暂停的时间。点击断点以展开选项:

    • 在检查预条件前 - 在模块检查先决条件之前,仿真停止。

    • 在预条件有效后 - 仅当先决条件为真时,仿真才会停止。

    如果清除这两个选项,表将删除断点。如果选择两个选项,则该模块会创建两个断点。

    在此示例中,选择在检查预条件前并清除在预条件有效后

  4. 仿真模型。当执行到达断点时,仿真暂停。该模块以绿色突出显示了仿真停止的先决条件。

    This image shows the requirement when the simulation pauses at the precondition. Because you set the breakpoint to stop when the precondition evaluates, the simulation highlights the evaluated preconditions of the requirement.

  5. 当仿真在断点处暂停时,您可以使用调试选项卡中的按钮以其他方式继续执行:

    按钮描述
    继续继续执行到下一个断点。
    越过

    前进到需求集执行的下一步。可能的步骤包括:

    • 评估先决条件或后条件

    • 执行操作。当您跨过时,每个动作单元都会从左到右执行。如果操作单元包含多行,则在跨过时执行操作的每一行。

    步入

    从预条件、后条件或调用函数的操作,前进到函数中的第一个可执行语句。

    否则,进入需求集执行的下一步。当您进入时,每个动作单元从左到右执行。如果操作单元包含多行,则在进入时执行操作的每一行。

    步出

    从函数调用返回到调用该函数的需求预条件、后条件或动作。

    否则,继续执行到下一个断点。

    停止退出调试模式并中断执行。

    在这个示例模型中,点击继续可进入下一个时间步或结束仿真。

使用多个断点

您可以向 Requirements Table模块添加多个断点。该模块首先评估列出的需求,然后向下进行。请参阅在 Requirements Table 模块中建立层次结构

Dice Game Rules 模块中,为索引为 2 的需求添加一个断点,清除在检查预条件前,选择在预条件有效后,并仿真模型。点击继续以前进到下一个断点或下一个时间步。在第一个时间步中,索引为 2 的需求不会暂停仿真。但是,如果玩家设置了点值,则仿真会在下一个时间步的两个断点处暂停。

This image shows the table when the simulation pauses at the requirement with index 2. In the first time step, this requirement breakpoint is ignored. In the following time step, this requirement pauses at the action because the precondition is true. The actions highlight green.

再次运行仿真,但点击越过步入。调试器在模块执行的每个步骤处都会暂停。根据结果,调试器只在其中一个操作处停止,但会评估几个预条件。

查看断点处的仿真状态

您可以在断点列表窗格中查看有关断点的其他信息。要打开窗格,点击断点,然后点击断点列表断点列表窗格显示五列:

列标题描述
已启用指定断点是否启用。当您在需求上禁用在检查预条件前在预条件有效后时,断点图标为灰色
指定断点的位置。
源类型模块是在检查先决条件之前还是在先决条件有效之后检查需求。
条件指定仿真暂停前必须为真的逻辑表达式。使用Requirements Table模块数据和文字值指定表达式。该表达式的计算结果必须为逻辑 true (1) 或 false (0)。
命中数指定仿真在断点处暂停的次数。

Dice Game Rules模块中,断点列表窗格列出了两个断点。运行模型以查看运行调试器时每个断点暂停仿真的次数。窗格突出显示了仿真暂停的断点。

This image shows the Breakpoints List pane at the second time step when the simulation pauses at the second breakpoint. The breakpoint that the simulation pauses at is highlighted green.

在仿真过程中观测数据值

您可以在仿真时使用符号窗格或命令窗口跟踪模块中的数据值。

查看符号窗格中的数据值

要在仿真期间查看 Requirements Table 模块中的符号窗格的数据值:

  1. 打开符号窗格。在建模选项卡的设计数据部分中,点击符号窗格

  2. 为需求添加断点。

  3. 运行模型。

  4. 当仿真暂停时,符号窗格会显示断点处的值。如果数据是数组,则数据列显示数据的维度和数据类型。在这个例子中,数据是标量。

This image shows an example of the data values in the Symbols pane when the debugger pauses at a breakpoint.

使用命令行调试器查看模块数据

您可以在MATLAB 命令窗口中查看模块数据的值。当到达断点时,在 debug>> 提示符下输入数据的名称以查看其值和数据类型。

debug>> dice1

	int8        
	
	5

debug>> 

您还可以在调试时在命令窗口中输入以下命令:

命令描述

dbcont

继续执行到下一个断点。

dbstep [in|out]

遇到断点后前进到下一步执行。

dbquit

退出调试并终止仿真。

help

显示命令行调试的帮助。

print <data>

显示当前时间步和断点处数据data的值。如果 data 是向量或矩阵,您也可以索引 data。例如,data(1,2)

save

将当前时间步和断点的数据保存到指定的文件。该命令使用MATLAB save命令的语法。要从 MATLAB 基础工作区检索数据,请在仿真完成后使用 load 函数。

<data>

如果数据在模块中定义,则相当于 print <data>

who

显示模块中定义的数据。

whos

显示模块中定义的数据的大小和类型。

要在 debug>> 提示符下的 MATLAB 基础工作区中发出命令,请使用 evalin 命令,第一个参量为 "base",后跟第二个参量命令,例如 evalin("base","whos")。您不能在 debug>> 提示符下定义或更改数据。

解决单元格错误

当模块识别出语法错误或在符号窗格中未定义的数据时,会出现表单元格错误。指向或点击单元格旁边的警告图标 以阅读错误消息。如果您在没有解决这些问题的情况下运行仿真,诊断查看器将显示有关错误的详细信息。

编辑表格单元格时,该模块不会检测所有问题。例如,如果需求的持续时间计算为向量或矩阵,则会发生编译错误。这些警告和错误出现在诊断查看器中。

另请参阅

相关主题