Main Content

调试 MATLAB Function 模块

您可以使用 MATLAB Function 模块编辑器来调试 MATLAB Function 模块代码。MATLAB Function 模块编辑器包含一些与 MATLAB® 编辑器中相同的调试工具。要调试 MATLAB Function 模块代码,请设置至少一个断点并运行仿真。

调试示例函数

此示例使用您在用 MATLAB Function 模块在 Simulink 中实现 MATLAB 函数中创建的模型 call_stats_block2。要调试此模型中的 MATLAB Function 模块代码,请执行以下操作:

  1. 打开 call_stats_block2 模型。双击 MATLAB Function 模块打开编辑器。

  2. MATLAB Function 模块编辑器中,点击以下行左侧的行号:

    len = length(vals);

    行号以红色突出显示,表示存在断点。

    MATLAB function code with a breakpoint set on the line 7.

  3. 对模型进行仿真。

    当执行到断点时,仿真将暂停。绿色箭头指向仿真暂停的位置。

    This image shows the debugging breakpoint and where the execution paused with the highlighted line.

  4. 函数选项卡上,点击越过以继续执行。

    执行前进到 stats 的下一行,它调用局部函数 avg

  5. 函数选项卡上,点击步入

    执行前进到局部函数 avg。进入局部函数后,您可以使用越过步入命令继续执行。如果局部函数又调用另一个局部函数,可以使用步入进入。要执行局部函数的其余行,可以使用步出

  6. 点击越过以执行 avg 中的唯一一行代码。

  7. 点击越过以返回到函数 stats

    执行前进到调用 avg 之后的代码行。

  8. 点击越过两次,以计算 stdev 并执行 plot 函数。

    plot 函数在 MATLAB 中执行:

    This shows a plot of the input values and a line drawn through the values.

  9. 点击继续以继续执行模型。

    如果返回到模型,计算出的 meanstdev 的值将出现在 Display 模块中。

  10. MATLAB Function 模块编辑器中,点击停止以停止仿真。

注意

您可以在普通模式和加速模式下调试 MATLAB Function 模块。但是,如果在加速模式下仿真的模型在模型引用中使用 MATLAB Function 模块,父模型仿真将忽略断点。

设置断点条件

您可以在 MATLAB Function 模块内的断点上输入 MATLAB 表达式作为条件。仅当满足该条件时,仿真才会在断点处暂停。要设置条件断点,请在 MATLAB Function 模块编辑器中,右键点击一个代码行左边的行号,选择设置条件断点,然后在对话框中输入条件。您可以使用任何有效的 MATLAB 表达式作为条件。此表达式可以包含数值以及位于断点作用域内的任何数据。

要添加或修改某现有断点的条件,请右键点击该断点,然后选择设置/修改条件

在仿真期间观察函数变量

在仿真 MATLAB Function 模块时,您可以使用几种工具来跟踪函数的变量值。

在代码中观察函数变量

要在仿真期间在代码中查看 MATLAB Function 模块的函数中的变量值,请执行以下操作:

  1. MATLAB Function 模块编辑器添加一个断点。

  2. 运行模型。

  3. 当仿真暂停时,指向一个变量名称。工具提示显示当前变量值。

    例如,要在仿真期间观察变量 stdev,请指向代码中的 len

    The cursor points to the variable len, and the value of the variable populates during simulation.

符号窗格中观察函数变量

要在仿真期间在符号窗格中查看 MATLAB Function 模块的变量值,请执行以下操作:

  1. 打开符号窗格。在函数选项卡中,点击编辑数据

  2. MATLAB Function 模块编辑器添加一个断点。

  3. 运行模型。

  4. 当仿真暂停时,符号窗格会用断点处的值进行更新。如果变量是数组,则列显示该变量的维度和数据类型。指向列以查看值。

    例如,要在仿真期间查看变量 vals,请指向列中 vals 的值。

    The cursor points to the variable vals, and the value of the variable populates during simulation.

用命令行调试器监视函数变量

在仿真期间,您可以在命令行窗口中查看函数变量的值。当到达断点时,在 debug>> 提示符处输入变量的名称以查看其值。

debug>> stdev
 
	1.1180

debug>> 

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

命令描述

dbcont

继续执行到下一个断点。

dbquit

退出调试并终止仿真。

dbstep [in|out]

遇到断点后,前进到下一个程序步骤。跳过或者进入/退出 MATLAB 局部函数。

help

显示命令行调试帮助。

print <var>

显示变量 var 在当前作用域中的值。如果 var 是向量或矩阵,您也可以对 var 进行索引。例如,var(1,2)

save

将当前作用域中的所有变量保存到指定的文件中。遵循 MATLAB save 命令的语法。要从 MATLAB 基础工作区检索变量,请在仿真完成后使用 load 命令。

<var>

如果变量在当前作用域内,则等效于 print <var>

who

显示当前作用域中的变量。

whos

显示当前作用域中所有变量的大小和类(类型)。

如果在 debug>> 提示符下输入其他命令,结果将在 MATLAB Function 模块的工作区中执行。要在 MATLAB 基础工作区中发出命令,请使用 evalin 命令和第一个参量 "base" 后跟第二个参量命令,例如 evalin("base","whos")。您无法在 debug>> 提示符下定义或更改变量。

显示大小限制

MATLAB Function 模块编辑器不显示维数超过二或元素数超过 200 的矩阵的内容。对于超过这些限制的矩阵,MATLAB Function 模块编辑器只显示形状和基类型。

检查数据范围违例

当输入或输出值进入或离开 MATLAB Function 模块时,模块将检查输入和输出数据是否存在范围违规问题。要启用数据范围违规检查,请打开“配置参数”窗口,点击诊断 > 数据有效性,并将仿真范围检查设置为 errorwarning

指定数据范围

要指定输入和输出变量的范围,请在 MATLAB Function 模块编辑器中,执行以下操作:

  1. 符号窗格中,点击感兴趣的变量。

  2. 在属性检查器的属性选项卡中,通过输入所需的最小值最大值值来调整限制范围属性。

调试 Initialize FunctionTerminate Function 模块中的 MATLAB Function 模块

当您在 Initialize FunctionTerminate Function 模块中使用 MATLAB Function 模块时,您无法使用调试代码部分中的按钮来浏览断点。您必须使用命令行调试器或行号上下文菜单选项。

要使用行号上下文菜单,请在 MATLAB Function 模块编辑器中,添加一个断点并运行仿真。在仿真期间,右键点击断点后的任何行号,然后点击继续运行到此行

this image shows the line number context menu that appears when you debug a MATLAB Function block. The additional debugging options include Step Over, Step In, Step Out, Continue, and Stop

另请参阅

相关主题