主要内容

调试MATLAB代码文件

因为R2021b。替换调试MATLAB程序(R2021a)和在实时编辑器中调试代码(R2021a)。

你可以在你的MATLAB中诊断问题®通过在编辑器和实时编辑器中交互地调试代码,或通过使用命令窗口中的调试函数以编程方式调试代码,来编写代码文件。

有几种方法可以调试你的代码:

  • 通过删除分号显示输出。

  • 将代码运行到特定行,然后单击Run to Here按钮暂停

  • 通过单击Step In按钮,在暂停时进入函数和脚本

  • 向文件中添加断点,以支持在运行代码时在特定行暂停。

在开始调试之前,为了避免意外的结果,请保存代码文件,并确保代码文件和它们调用的任何文件都存在于搜索路径或当前文件夹中。MATLAB处理未保存的更改的方式不同,这取决于你从哪里调试:

  • 编辑器——如果一个文件包含未保存的更改,MATLAB会在运行该文件之前保存它。

  • Live Editor - MATLAB运行文件中的所有更改,无论它们是否保存。

  • 命令窗口——如果一个文件包含未保存的更改,MATLAB将运行该文件的已保存版本。您看不到更改的结果。

显示输出

确定MATLAB代码文件中哪里出现了问题的一种方法是显示输出。若要显示一行的输出,请删除该行末尾的分号。在编辑器中,MATLAB在命令窗口中显示输出。在Live Editor中,MATLAB显示输出和创建输出的代码行。

例如,假设您有一个名为plotRand.m画出一个随机数据的向量并在均值处画一条水平线。

n = 50;r =兰德(n, 1);Plot (r) m = mean(r);持有情节([0 n] [m m])标题(“随机均匀数据均值”

命令的输出兰德在第二行执行函数,删除该行末尾的分号。的值在MATLAB中显示r在命令窗口中。

命令窗口显示对plotRand函数的调用,后面跟着结果输出,即r的值

在Live Editor中,MATLAB显示的值r两行。

在第二行末尾删除分号的plotRand实时脚本,结果输出r的值显示在右边

调试使用跑到这里

要在代码的特定位置查看工作空间中所有变量的状态,请运行代码文件,然后暂停。若要将代码运行到指定行,然后暂停,请单击“运行到这里”按钮在线的左边。如果无法到达选定的行,MATLAB将继续运行,直到到达文件的末尾或遇到断点。

调试时,运行到这里按钮变成“继续到这里”按钮.在函数和类中,运行到指定行然后暂停仅在使用Continue to Here按钮进行调试时可用.在R2021a和以前的版本中,要运行到光标所在的位置并在调试时暂停,请转到编辑器选项卡,并单击“运行到光标”按钮

例如,单击Run to Here按钮在第二行左边plotRand.m.MATLAB运行plotRand.m从第一行开始,在运行第二行之前暂停。

plotRand脚本,左边空白处显示Run to Here按钮,位于第二行的行号旁边

当MATLAB暂停时,会发生多个变化:

  • 运行按钮编辑器住编辑器选项卡更改为继续按钮。

  • 命令窗口中的提示符变为K > >表明MATLAB处于调试模式,键盘处于控制状态。

  • MATLAB通过使用绿色箭头和绿色高亮显示来指示暂停的位置。

    在第二行有绿色箭头和绿色高亮显示的plotRand脚本,表示MATLAB在第二行暂停

提示

在MATLAB暂停时避免修改文件是一个很好的实践。在MATLAB暂停时所做的更改直到MATLAB运行完代码并重新运行代码后才会运行。

在继续运行代码之前,暂停MATLAB的那一行不会运行。若要继续运行代码,请单击继续按钮。MATLAB继续运行该文件,直到它到达文件的末尾或一个断点。您还可以单击Continue to Here按钮在您想要继续运行的代码行的左边。

以逐行运行代码编辑器住编辑器选项卡上,单击一步.MATLAB执行当前被暂停的行,并在下一行执行暂停。

第三行有绿色箭头和绿色高亮显示的plotRand脚本,表示MATLAB在第三行暂停

调试时查看变量值

要在MATLAB暂停时查看变量的值,请将光标放在变量上。变量的当前值显示在数据提示中。在移动光标之前,数据提示一直在视图中。要禁用数据提示,请转到视图选项卡并单击Datatips按钮。

plotRand脚本在第二行暂停,显示变量n的值的数据提示

您还可以通过在“命令窗口”中输入变量名来查看变量的值。例如,查看变量的值n、类型n并按输入.命令窗口显示变量名及其值。要查看当前工作区中的所有变量,请使用workspace浏览器。

有关更多信息,请参见调试时检查值

暂停正在运行的文件

您可以在长时间运行的代码运行时暂停它,以检查进度并确保它按预期运行。要暂停正在运行的代码,请转到编辑器住编辑器选项卡并单击暂停按钮。MATLAB在下一个可执行行暂停,然后暂停按钮更改为继续按钮。要继续运行代码,请按继续按钮。

请注意

单击暂停按钮会导致MATLAB在您自己代码之外的文件中暂停。

步进功能

在调试时,您可以进入所谓的文件,在想要检查值的地方暂停。要进入一个文件,请单击step In按钮直接在您想要进入的函数或脚本的左边。MATLAB仅在该行包含对另一个函数或脚本的调用时才显示该按钮。进入后,单击Step Out按钮在文件的顶部运行被调用函数的其余部分,留下被调用函数,然后暂停。

默认情况下,Step In按钮仅显示用户定义的函数和脚本。控件上显示所有函数和脚本的按钮首页选项卡,环境部分中,点击首选项.然后,选择MATLAB>编辑/调试器,而在调试节中,设置在按钮中显示上下文步骤选项总是.若要永不显示该按钮,请设置在按钮中显示上下文步骤选项从来没有

方法,也可以在调试时逐步进入和退出函数一步走出按钮上编辑器住编辑器选项卡。这些按钮不尊重在按钮中显示上下文步骤首选项,并始终在用户定义的和MathWorks之间进出®功能。

函数调用栈

当您进入一个被调用的函数或文件时,MATLAB会在当前行暂停之前显示它所执行的函数列表。列表,也叫函数调用栈,显示在文件的顶部,并按顺序显示函数,从左侧第一个被调用的脚本或函数开始,到右侧以MATLAB暂停的当前脚本或函数结束。

plotRand的函数调用堆栈,将plotRand显示为第一个被调用的脚本,并将均值显示为当前函数

对于函数调用堆栈中的每个函数,都有一个相应的工作区。工作区包含您在MATLAB中创建的变量,或从数据文件或其他程序导入的变量。您通过命令窗口分配或使用脚本创建的变量属于基本工作区。在函数中创建的变量属于它们自己的函数工作区。

您可以通过选择不同的工作空间来检查当前工作空间之外的变量的值。有关更多信息,请参见调试时检查值

添加断点并运行代码

如果您希望在每次运行代码时都暂停文件中的代码行,请在这些行中添加断点。您可以通过使用编辑器和实时编辑器以交互方式添加断点,也可以通过使用命令窗口中的函数以编程方式添加断点,或者两者都可以。

有三种类型的断点:标准的、条件的和错误的。要在编辑器或实时编辑器中添加标准断点,请单击要设置断点的可执行行左侧的灰色区域。例如,单击第三行旁边的区域plotRand.m在该行上添加断点。

在第三行有一个红色断点的plotRand脚本

当您运行该文件时,MATLAB会在断点指示的代码行处暂停。在继续运行代码之前,暂停MATLAB的那一行不会运行。

例如,使用plotRand.m文件在编辑器中打开,单击运行按钮编辑器选项卡。MATLAB运行plotRand.m从第一行开始,在运行第三行之前暂停。

当MATLAB暂停时,会发生多个变化:

  • 运行按钮编辑器住编辑器选项卡更改为继续按钮。

  • 命令窗口中的提示符变为K > >表明MATLAB处于调试模式,键盘处于控制状态。

  • MATLAB通过使用绿色箭头和绿色高亮显示来指示暂停的位置。

    plotRand脚本,在第三行有一个断点,在第三行有一个绿色箭头和绿色高亮显示,表示MATLAB在第三行暂停

提示

在MATLAB暂停时避免修改文件是一个很好的实践。在MATLAB暂停时所做的更改直到MATLAB运行完代码并重新运行代码后才会运行。

若要继续运行代码,请单击继续按钮。MATLAB继续运行该文件,直到它到达文件的末尾或一个断点。以逐行运行代码编辑器住编辑器选项卡上,单击一步.MATLAB执行当前被暂停的行,然后在下一行暂停。

有关不同类型的断点以及如何设置、清除和禁用它们的详细信息,请参见设置断点

结束调试会话

识别出问题后,要结束调试会话,请转到编辑器住编辑器选项卡并单击停止.结束调试后,正常的>>命令窗口中的提示符重新出现在K > >提示。您不再可以访问函数调用堆栈。

为避免混淆,请确保在每次完成调试后都结束调试会话。如果对文件进行更改并在调试时保存它,MATLAB将结束调试会话。如果MATLAB暂停时没有响应,按Ctrl + C调试结束。

使用键盘快捷键或函数进行调试

您可以通过使用键盘快捷键或使用命令窗口中的函数来执行大多数调试操作。该表描述了调试操作以及可用于执行这些操作的相关键盘快捷键和函数。

行动 描述 键盘快捷键 函数

继续

继续运行文件,直到到达文件末尾或遇到另一个断点。

F5

dbcont

一步

运行当前的代码行。

F10

Shift +命令+ OmacOS系统)

dbstep

一步

运行当前代码行,如果该行包含对另一个函数的调用,则进入该函数。

Shift + + I命令macOS系统)

dbstep

走出

在介入之后,运行被调用函数的其余部分,离开被调用函数,然后暂停。

Shift +季

命令+ Shift + UmacOS系统)

dbstep

停止

结束调试会话。

Shift + F5

dbquit

设置断点

如果不存在断点,则在当前行设置断点。

F12

dbstop

清晰的断点

清除当前行的断点。

F12

dbclear

相关的话题

Baidu
map