Main Content

调试 MATLAB 代码文件

自 R2021b 开始提供。取代调试 MATLAB 程序 (R2021a) 和在实时编辑器中调试代码 (R2021a)。

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

调试代码有几种方法:

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

  • 通过点击“运行到此行”按钮 将代码运行到特定行并暂停。

  • 通过点击“步入”按钮 在暂停状态下步入函数和脚本。

  • 将断点添加到文件中,以便在运行您的代码时在特定行暂停。

开始调试之前,为避免意外结果,请保存代码文件,并确保代码文件及其调用的任何文件存在于搜索路径或当前文件夹中。MATLAB 根据您调试的位置以不同方式处理未保存的更改:

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

  • 实时编辑器 - MATLAB 运行文件中的所有更改,无论是否保存了它们。

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

显示输出

确定 MATLAB 代码文件中出现问题的位置的一种方法是显示输出。要显示一行的输出,请删除该行末尾的分号。在编辑器中,MATLAB 在命令行窗口中显示输出。在实时编辑器中,MATLAB 随创建输出的代码行显示输出。

例如,假设您有名为 plotRand.m 的脚本,它绘制随机数据向量图,并在绘图中的均值处绘制一条水平线。

n = 50;
r = rand(n,1);
plot(r)

m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')

要显示第二行 rand 函数的输出,请删除行尾的分号。MATLAB 在命令行窗口中显示 r 的值。

Command window showing a call to the plotRand function followed by the resulting output, the value of r

在实时编辑器中,MATLAB 随第二行代码显示 r 的值。

plotRand live script with the semicolon removed from the end of line two and the resulting output, the value of r, displayed on the right

使用运行到此行进行调试

要在工作区中了解在代码中的特定点处所有变量的状态,请运行代码文件,然后暂停。要使代码运行到指定的行,然后暂停,请点击该行左侧的“运行到此行”按钮 。如果不能到达所选行,则 MATLAB 会继续运行,直到到达文件末尾或遇到断点。

调试时,“运行到此行”按钮 变为“继续运行到此行”按钮 。在函数和类中,运行到指定行后暂停的功能仅在使用“继续运行到此行”按钮 进行调试时可用。在 R2021a 和以前的版本中,要在调试时运行到光标所在的位置并暂停,请转至编辑器选项卡,然后点击“运行到光标处”按钮

例如,点击 plotRand.m 中第二行左侧的“运行到此行”按钮 。MATLAB 从第一行开始运行 plotRand.m,并在运行第二行之前暂停。

plotRand script with the Run to Here button displayed in the left margin, next to the line number for line two

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

  • 编辑器实时编辑器选项卡中的 运行按钮更改为 继续按钮。

  • 命令行窗口中的提示符将更改为 K>>,指示 MATLAB 处于调试模式且键盘受控制。

  • MATLAB 使用绿色箭头和绿色突出显示指示暂停的行。

    plotRand script with a green arrow and green highlighting on line two, indicating that MATLAB is paused at line two

提示

最好避免在 MATLAB 暂停时修改文件。在 MATLAB 暂停期间更改的代码不会运行,直至MATLAB 完成代码运行并重新运行代码,这些更改后的代码才会运行。

MATLAB 会停留在暂停执行的行,直到您继续运行代码为止。要继续运行代码,请点击 继续按钮。MATLAB 会继续运行该文件,直到到达文件末尾或断点。您也可以点击要继续运行到的代码行左侧的“继续运行到此行”按钮

要继续逐行运行代码,请在编辑器实时编辑器选项卡上点击 步进。MATLAB 会执行当前所在的行,并在下一行暂停。

plotRand script with a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

在调试时查看变量值

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

plotRand script paused at line two with a data tip showing the value of the variable n

您也可以通过在命令行窗口中键入变量名称来查看变量的值。例如,要查看变量 n 的值,请键入 n 并按 Enter 键。命令行窗口会显示变量名及其值。要查看当前工作区中的所有变量,请使用工作区浏览器。

有关详细信息,请参阅调试时检验值

暂停运行文件

对于运行时间长的代码,您可以在它运行的中间暂停它,以检查进度并确保它按预期运行。要暂停运行代码,请转至编辑器实时编辑器选项卡并点击 暂停按钮。MATLAB 会在下一个可执行代码行处暂停,并且 暂停按钮会更改为 继续按钮。要继续运行代码,请按 继续按钮。

注意

点击 暂停按钮会使 MATLAB 在您自己的代码外的文件中暂停。

步入函数

调试时,您可以步入所调用的文件中,在要检查值的点暂停。要步入文件,请点击您要步入的函数或脚本左侧的“步入”按钮 。仅当该行包含对另一个函数或脚本的调用时,MATLAB 才会显示该按钮。步入后,点击文件顶部的“步出”按钮 以运行所调用函数的其余部分,离开所调用的函数,然后暂停。

默认情况下,“步入”按钮 仅对用户定义的函数和脚本显示。要对所有函数和脚本也显示该按钮,请在主页选项卡的环境部分中,点击预设。然后,选择 MATLAB > 编辑器/调试器,在调试部分中,将显示上下文 "步入" 按钮选项设置为始终。要从不显示该按钮,请将显示上下文 "步入" 按钮选项设置为从不

您也可以使用编辑器实时编辑器选项卡上的 步入 步出按钮,在调试时步入和步出函数。这些按钮不遵循显示上下文 "步入" 按钮预设项,并且始终可以步入和步出用户定义的函数和 MathWorks® 函数。

函数调用堆栈

当您步入所调用的函数或文件时,MATLAB 将显示在当前行暂停前执行的函数列表。该列表,也称为该函数调用堆栈显示在文件的顶部,按顺序显示各函数,最左侧是第一个调用的脚本或函数,最右侧是 MATLAB 暂停处的当前脚本或函数。

Function call stack for plotRand showing plotRand as the first called script and mean as the current function

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

您可以通过选择不同工作区来检查当前工作区之外的变量值。有关详细信息,请参阅调试时检验值

添加断点并运行代码

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

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

plotRand script with a red breakpoint at line three

运行文件时,MATLAB 会在由断点指示的代码行处暂停。MATLAB 会停留在暂停执行的行,直到您继续运行代码为止。

例如,在编辑器中打开 plotRand.m 文件的情况下,点击编辑器选项卡中的 运行按钮。MATLAB 从第一行开始运行 plotRand.m,并在运行第三行之前暂停。

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

  • 编辑器实时编辑器选项卡中的 运行按钮更改为 继续按钮。

  • 命令行窗口中的提示符将更改为 K>>,指示 MATLAB 处于调试模式且键盘受控制。

  • MATLAB 使用绿色箭头和绿色突出显示指示暂停的行。

    plotRand script with a breakpoint at line three and a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

提示

最好避免在 MATLAB 暂停时修改文件。在 MATLAB 暂停期间更改的代码不会运行,直至MATLAB 完成代码运行并重新运行代码,这些更改后的代码才会运行。

要继续运行代码,请点击 继续按钮。MATLAB 会继续运行该文件,直到到达文件末尾或断点。要继续逐行运行代码,请在编辑器实时编辑器选项卡上点击 步进。MATLAB 会执行当前所在的行,然后在下一行暂停。

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

结束调试会话

发现问题后,要结束调试会话,请转至编辑器实时编辑器选项卡,然后点击 停止。结束调试后,命令行窗口中正常的 >> 提示符会重新出现,取代 K>> 提示符。您也无法再访问该函数调用堆栈。

为避免混淆,请务必在每次完成调试时结束调试会话。如果在调试时对文件进行更改并保存,则 MATLAB 将结束调试会话。如果 MATLAB 暂停时变得无响应,请按 Ctrl+C 结束调试。

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

您可以使用键盘快捷方式或在命令行窗口中使用函数来执行大多数调试操作。下表介绍了调试操作以及相关键盘快捷方式和可用于执行这些操作的函数。

操作描述键盘快捷方式函数

继续

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

F5

dbcont

步进

运行当前代码行。

F10

(在 macOS 系统上是 Shift+Command+O

dbstep

步入

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

F11

(在 macOS 系统上是 Shift+Command+I

dbstep in

步出

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

Shift+F11

(在 macOS 系统上是 Shift+Command+U

dbstep out

停止

结束调试会话。

Shift+F5

dbquit

设置断点

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

F12

dbstop

清除断点

清除当前行的断点。

F12

dbclear

相关主题