Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

设置断点

关于断点

调试器允许您在仿真中定义停止点,即断点。然后,您可以使用调试器 continue 命令,将仿真从一个断点运行到另一个断点。调试器允许您定义两种类型的断点:无条件和条件。如果仿真到达了先前指定的方法,则为无条件断点。如果仿真中发生了您预先指定的情况时,则会出现条件断点。

当您知道您程序中的某个特定点处出现问题,或者当发生特定情况时,断点会很有用。通过定义适当的断点并使用 continue 命令运行仿真,您可以立即跳到仿真中出现问题的点。

注意

当您在调试器中 MATLAB® S-Function 的断点处停止仿真时,若要退出 MATLAB,您必须先退出调试器。

设置无条件断点

您可以从以下位置设置无条件断点:

  • 调试器工具栏

  • Simulation Loop 窗格

  • MATLAB 产品命令行窗口(仅限命令行模式)

从调试器工具栏设置断点

要启用 Breakpoint 按钮,

  1. 对模型进行仿真。

  2. 点击 Step over current method 按钮,直到 simulationPhase 突出显示。

  3. 点击 Step into current method 按钮。

调试器将在 Breakpoints 窗格的 Break/Display points 面板中显示所选模块的名称。

注意

点击工具栏上的 Breakpoint 按钮可在主时间步中对模块方法的调用设置断点。

您可以通过取消选中断点列面板中的复选框来临时禁用模块的断点。要清除模块上的断点,并从面板中删除其条目,请执行以下步骤

  1. 选择条目。

  2. 点击面板上的 Remove selected point 按钮。

注意

您不能在虚拟模块上设置断点。虚拟模块是纯粹的图形:它指示模型内计算模块的组合或关系。如果您尝试在虚拟模块上设置断点,调试器会发出警告。您可以使用 slist 命令获取模型的非虚拟模块列表(请参阅Displaying a Model's Nonvirtual Blocks)。

从 Simulation Loop 窗格设置断点

要在 Simulation Loop 窗格中显示的特定方法调用处设置断点,请选中断点列窗格中方法名称旁边的复选框。

要清除断点,请取消选中该复选框。

从命令行窗口设置断点

在命令行模式下,可分别使用 breakbafter 命令在指定的方法之前或之后设置断点。使用 clear 命令可清除断点。

设置条件断点

您可以使用调试器 Breakpoints 窗格上的任一 Break on conditions 控件组

或以下命令(在命令行模式下)来设置条件断点。

命令...导致仿真停止...
tbreak [t]

在某个仿真时间步处

ebreak

在模型中出现可恢复错误时

nanbreak

在出现下溢或溢出 (NaN) 或无限 (Inf) 值时

xbreak

当仿真遇到可确定仿真步长的状态时

zcbreak

当仿真时间步之间出现过零点时

设置时间步断点

要设置时间步断点,请在调试器 Break at time 字段(GUI 模式)中输入时间,或者使用 tbreak 命令输入时间。这会使得调试器在指定时间之后的第一个时间步的 Outputs.Major 模型方法处停止仿真。例如,以调试模式启动 vdp 并输入命令

tbreak 2
continue

会使得调试器在 continue 命令的输出所指示的时间步 2.078vdp.Outputs.Major 方法处停止仿真。

%----------------------------------------------------------------%
[Tm = 2.034340153847549      ] vdp.Outputs.Minor
(sldebug @37): 

遇到非有限值时中断

选择调试器 NaN values 选项或输入 nanbreak 命令可使仿真在以下情况下停止:计算的值为无限值或超出运行仿真的机器支持的值范围。此选项对于查明模型中的计算误差非常有用。

遇到限制步长的时间步时中断

选择 Step size limited by state 选项或输入 xbreak 命令可使调试器在以下情况下停止仿真:模型使用可变步长求解器,并且求解器遇到的状态会限制它可以采用的步长。在调试似乎需要太多仿真时间步来解算的模型时,该命令非常有用。

在过零点处断开

选择 Zero crossings 选项或输入 zcbreak 命令可使仿真在以下情况下停止:在包含可能出现过零点的模块的模型中检测到非采样过零点。停止后,将显示在其中检测到过零点的模块的 ID、类型和名称。模块 ID (s:b:p) 由系统索引 s、模块索引 b 和端口索引 p 组成,它们由冒号分隔(请参阅Block ID)。

例如,在开始执行 zeroxing 示例模型时设置过零点断开,

>> sldebug zeroxing
%--------------------------------------------------------------
%
[TM = 0                      ] zeroxing.Simulate
(sldebug @0): >> zcbreak
Break at zero crossing events              : enabled

然后继续仿真

(sldebug @0): >> continue

随之出现过零点断开

Interrupting model execution before running mdlOutputs at the left post of 
(major time step just before) zero crossing event detected at the following location:
  6[-0]  0:5:2  Saturate  'zeroxing/Saturation'
%----------------------------------------------------------------%
[TzL= 0.3435011087932808     ] zeroxing.Outputs.Major
(sldebug @16): >> 

如果模型不包括能够产生非采样过零点的模块,该命令将输出一条消息,告知您这一情况。

在出现求解器误差时中断

选择调试器 Solver Errors 选项或输入 ebreak 命令可使仿真在求解器检测到模型中的可恢复错误时停止。如果不设置或禁用此断点,求解器可从错误中恢复,并继续执行仿真而不通知您。

相关示例

详细信息