Main Content

dbstop

设置断点用于调试

说明

示例

dbstop in filefile 中的第一个可执行代码行位置设置断点。当您运行 file 时,MATLAB® 进入调试模式,在断点处暂停执行并显示暂停位置对应的行。

示例

dbstop in file at location 在指定位置设置断点。MATLAB 执行会在到达该位置之前立即暂停,除非该位置处是一个匿名函数。如果该位置处是匿名函数,则执行将在断点之后立即暂停。

示例

dbstop in file if expression 在文件的第一个可执行代码行位置设置条件断点。仅在 expression 的计算结果为 true (1) 时暂停执行。

示例

dbstop in file at location if expression 在指定位置设置条件断点。仅在 expression 计算结果为 true 时,于该位置处或该位置前暂停执行。

示例

dbstop if condition 在满足指定的 condition(如 errornaninf)的行位置处暂停执行。与其他断点不同,您不在特定文件中的特定行设置此断点。MATLAB 会在发生指定的 condition 时在任何文件的任何行暂停执行。

示例

dbstop(b) 用于恢复您之前保存到 b 的断点。包含保存的断点的文件必须位于搜索路径中或当前文件夹中。MATLAB 按行号分配断点;因此,文件中的行数必须与保存断点时的行数相同。

示例

全部折叠

在程序的第一个可执行代码行上设置断点并暂停执行。

创建文件 buggy.m,其中包含以下语句。

function z = buggy(x)
n = length(x);
z = (1:n)./x;

发出 dbstop 命令并运行 buggy

dbstop in buggy
buggy(1:5)

MATLAB 会暂停,显示暂停所在行的行号,并进入调试模式。

2   n = length(x);
K>> 

键入 dbquit 退出调试模式。

在程序中局部函数的第一个可执行代码行上设置断点。

创建文件 myfile.m,其中包含以下语句

function n = myfile(x)
n = myfunction(x);

function y = myfunction(x)
y = x + 1;

myfunction 上设置断点。

 dbstop in myfile>myfunction

在程序中设置断点,使 MATLAB 在一定的循环迭代后暂停。

创建文件 myprogram.m,其中包含以下语句

x = ones(1,10);

for n = 1:10
x(n) = x(n) + 1;
end

设置断点以便在 n >= 4 时暂停,并运行代码。

dbstop in myprogram at 4 if n>=4
myprogram

n = 4 时,MATLAB 在经过 3 次循环迭代后在第 4 行上暂停。

4   x(n) = x(n) + 1;
K>> 

键入 dbquit 退出调试模式。

设置断点,以在发生运行时错误时暂停代码执行。

创建文件 mybuggyprogram.m,其中包含以下语句。

x = ones(1,10);

for n = 1:10
x(n) = x(n+1) + 1;
end

设置错误断点,并调用 mybuggyprogram

dbstop if error
mybuggyprogram

发生运行时错误,MATLAB 进入调试模式,在 mybuggyprogram.m 中的第 4 行暂停。

Index exceeds matrix dimensions.
Error in mybuggyprogram (line 4)
x(n) = x(n+1) + 1; 
4   x(n) = x(n+1) + 1;

键入 dbquit 退出调试模式。

运行 MException.last 以获取程序生成的错误消息标识符。

MException.last
ans = 

  MException with properties:

    identifier: 'MATLAB:badsubscript'
       message: 'Index exceeds matrix dimensions.'
         cause: {}
         stack: [1×1 struct]

清除错误断点并设置新错误断点,指定要捕获的错误消息的标识符。调用 mybuggyprogram

dbclear if error
dbstop if error MATLAB:badsubscript
mybuggyprogram

发生同样的运行时错误,MATLAB 进入调试模式,在 mybuggyprogram.m 中的第 4 行暂停。

Index exceeds matrix dimensions.
Error in mybuggyprogram (line 4)
x(n) = x(n+1) + 1; 
4   x(n) = x(n+1) + 1;

键入 dbquit 退出调试模式。

设置断点,以在代码返回 NaN 值时暂停执行。

创建文件 buggy.m,该文件需要一个输入向量。

function z = buggy(x)
n = length(x);
z = (1:n)./x;

设置警告断点,并使用包含 0 作为其元素之一的输入向量调用 buggy

dbstop if naninf
buggy(0:2)

发生除以零错误,MATLAB 进入调试模式,在 buggy.m 中的第 3 行上暂停。

NaN/Inf breakpoint hit for buggy on line 3.

键入 dbquit 退出调试模式。

设置、保存、清除并还原保存的断点。

创建文件 buggy.m,其中包含以下语句。

function z = buggy(x)
n = length(x);
z = (1:n)./x;

设置一个错误断点,并在 buggy 的第二行设置一个标准断点。

dbstop at 2 in buggy
dbstop if error

运行 dbstatus。MATLAB 描述您所设置的断点。

dbstatus
Breakpoint for buggy is on line 2.
Stop if error.

将代表断点的结构体赋值给变量 b,然后将 b 保存到 MAT 文件 buggybrkpnts。使用 b=dbstatus('-completenames') 保存绝对路径和断点功能嵌套顺序。

b = dbstatus('-completenames');
save buggybrkpnts b

清除全部断点。

dbclear all

通过加载 MAT 文件并对已保存结构体 b 调用 dbstop 来还原断点。

load buggybrkpnts
dbstop(b)

输入参数

全部折叠

文件名,指定为字符向量或字符串标量。对于 MATLAB 搜索路径中的文件,文件名可以包含部分路径名称;对于任何文件,文件名都可以包含绝对路径名称。有关 MATLAB 中有效文件名的详细信息,请参阅指定文件名称

示例: myfile.m

此外,file 可以包括一个文件标记 (>),用来指定到特定局部函数或到文件内的嵌套函数的路径。

示例: myfile>myfunction

如果 file 不是 MATLAB 代码文件(例如,是一个内置文件或 MDL 文件),则 MATLAB 会发出警告。MATLAB 无法在文件暂停,因此它会在执行文件之前暂停。

数据类型: char | string

file 中设置的断点位置,指定为下列选项之一:

  • file 中的行号,指定为字符向量或字符串标量。默认值为 1

  • file 中匿名函数编号所在的行号,指定为字符向量或字符串标量。例如,1@2 指定第 1 行中的第 2 个匿名函数。默认匿名函数编号是 1

  • file 中的局部函数的名称,指定为字符向量或字符串标量。

注意

在设置断点时,如果 file 包含文件标记,则您无法指定 location。例如,命令 dbstop in myfile>myfilefunction at 5 无效。

数据类型: char | string

计算结果为标量逻辑值 10 的逻辑表达式,指定为字符向量或字符串标量。

示例: n >= 4

数据类型: char | string

暂停条件,指定为下列选项之一:

  • error - 在 try/catch 块之外发生的运行时错误。在发生未捕获的运行时错误后,将无法恢复代码执行。

    如果只希望在发生某种特定错误时暂停执行,请指定消息 ID。例如:

    • dbstop if error 会在程序于 try/catch 块之外发生第一次运行时错误时暂停执行。

    • dbstop if error MATLAB:ls:InputsMustBeStrings 会在程序于 try/catch 块之外发生第一次运行时错误且消息 ID 为 MATLAB:ls:InputsMustBeStrings 时暂停代码执行。

  • caught error- 在 try/catch 块的 try 部分发生的运行时错误。如果只希望在发生某种特定错误时暂停执行,请指定消息 ID。

  • warning - 发生运行时警告。如果只希望在发生某种特定警告时暂停执行,请指定消息 ID。

    如果您已通过 warning off all 命令禁用警告或者已为指定的消息 id 禁用警告,此条件将失效。有关禁用警告的详细信息,请参阅 warning

  • naninf - 由于运算符、函数调用或标量赋值原因,代码而返回无限值 (Inf) 或非数字值 (NaN)。

先前使用 b=dbstatus 保存到结构体数组的断点列表。

提示

  • 开始调试之前,请确保您的程序已保存且该程序及其调用的任何文件位于您的搜索路径或当前文件夹中。

  • 要在断点暂停执行后恢复执行,请使用 dbcontdbstep。要退出调试模式,请使用 dbquit。要删除文件中的所有断点,请使用 dbclear in filename。要删除所有文件中的所有断点,请使用 dbclear all。有关详细信息,请参阅 dbclear

  • 当在断点位置处暂停时,如果正在显示程序所创建的模态对话框或图窗,则 MATLAB 有可能陷入无响应状态。要退出调试模式并返回 MATLAB 提示符 (>>),请使用 Ctrl+C

版本历史记录

在 R2006a 之前推出