主要内容

调试 MATLAB 代码文件

自 R2021b 起. 替换 Debug a MATLAB Program (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 随第 2 行代码显示 r 的值。

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

使用运行到此行进行调试

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

在 R2021b 之前的版本中: 要在调试时运行到光标位置并暂停,请转至编辑器选项卡,然后点击“运行到光标处”按钮

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

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

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

  • “调试器”面板打开。 (自 R2025a 起)

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

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

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

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

提示

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

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

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

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

在调试时查看变量值

要在 MATLAB 暂停时查看变量值,请将光标放在该变量上。该变量的当前值将显示在数据提示中。数据提示会一直在视图中,直到您移动光标。

plotRand script paused at line 2 with a data tip showing the size, data type, and value of the variable n

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

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

暂停运行文件

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

注意

当您点击 暂停按钮时,MATLAB 可能会在您自己的代码之外的文件中暂停。此外,在 MATLAB 暂停之前,您可能会注意到明显的延迟,并且 暂停按钮会变为 继续按钮。在某些情况下,MATLAB 可能根本不会暂停。原因是 MATLAB 在一些内置代码中无法暂停。

步入函数

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

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

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

函数调用堆栈

当您步入被调函数或文件时,“调试器”面板显示在函数调用堆栈部分中的当前行上暂停之前已执行的函数列表。该列表(也称为函数调用堆栈函数)按顺序显示各函数,其中 MATLAB 暂停的当前脚本或函数位于列表顶部,第一个调用的脚本或函数位于列表底部。 (自 R2025a 起)

要打开“调试器”面板(如果它尚未打开),请转至编辑器实时编辑器选项卡,在分析部分中,点击 调试器。您还可以使用边栏上的“打开更多面板”按钮 打开面板。

Debugger panel with the Function call stack section showing that the debugger is paused at line 3 of plotRand.m

对于函数调用堆栈中的每个函数,都有一个相应的工作区。工作区包含您在 MATLAB 中创建的变量或从数据文件或其他程序导入的变量。通过命令行窗口分配或使用脚本创建的变量属于基础工作区。在函数中创建的变量属于其自己的函数工作区。要检查当前工作区之外的变量的值,请在“调试器”面板的函数调用堆栈部分中选择对应的函数。有关详细信息,请参阅调试时检验值

在 R2025a 之前的版本中: 该函数调用堆栈表显示在文件的顶部,按顺序显示各函数,最左侧是第一个调用的脚本或函数,最右侧是 MATLAB 暂停处的当前脚本或函数。

添加断点并运行代码

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

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

plotRand script with a red breakpoint at line 3

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

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

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

  • “调试器”面板打开。您可以使用“调试器”面板管理所有打开的 MATLAB 代码文件中的断点。 (自 R2025a 起)

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

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

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

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

提示

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

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

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

在“调试器”面板中管理断点

自 R2025a 起

您可以使用“调试器”面板管理断点。默认情况下,当 MATLAB 进入调试模式时,调试器面板会自动打开。要手动打开调试器面板,请转至编辑器实时编辑器选项卡,在分析部分中,点击 调试器。您还可以使用边栏上的“打开更多面板”按钮 打开面板。要隐藏“调试器”面板,请点击边栏上的调试器 图标。

面板中的断点部分列出所有打开的 MATLAB 代码文件中的断点。该部分中的前四个断点(出现错误时暂停出现警告时暂停返回 NaN 或 Inf 时暂停出现未隐藏的输出时暂停)是错误断点。当您启用这些断点之一时,如果发生指定的错误条件,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

另请参阅

主题

外部网站