13.3断点

可以使用在任何m文件函数中设置断点设置断点作用

 
: dbstop fcn
: dbstop fcn line
: dbstop fcn line1 line2
: dbstop line1
: dbstop in fcn
: dbstop in fcn at line
: dbstop in fcn at line if "condition"
: dbstop in class at method
: dbstop if event
: dbstop if event ID
: dbstop (bp_struct)
: rline = dbstop

为内置调试器设置断点。

fcn是当前上的函数的名称路径。在调试模式下准备就绪时fcn参数可以省略,将使用current函数。子函数的断点是用scopeoperator设置的>’. 例如,如果文件m有一个子函数fcn2,然后是中的断点fcn2可以从指定文件>fcn2.

线是要打断的行号。如果线未指定,它默认为文件中的第一个可执行行fcn.m。在一个命令中可以指定多行;当使用函数语法时,行也可以作为单个向量参数传递([第1行, 第2行, …]).

条件是可以在断点处存在的代码上下文中计算的任何Octave表达式。当遇到断点时,条件将进行评估,如果条件是真的。如果条件无法计算,例如,因为它引用了未定义的变量,将引发错误。具有副作用的表达式(例如y++>1)将改变变量,通常应避免。包含引号的条件(’,‘)或注释字符(#’, ‘%)必须随附询价单。(这不适用于从编辑器的上下文菜单输入的条件。)例如:

轴中246处的dbstop(如果“any(opt==“x”)”)

指定的表格事件不会在给定的函数和行号处导致特定的断点。相反,当遇到某些意外事件时,它会导致进入调试模式。可能的值为

错误

报告错误时停止。这相当于同时指定debug_on_error(true)debug_on_interrupt(true).

捕获的错误

当try-catch块(尚未实现)捕获到错误时停止。

打断

中断时停止(Ctrl-C)发生。

naninf

当代码返回非有限值(尚未实现)时停止。

警告

返回警告时停止。这相当于指定debug_on_warning(true).

事件错误, 捕获的错误警告都可以后跟一个指定错误ID或警告ID的字符串。如果这样做,只有具有指定ID的错误才会导致执行停止。要在一组ID中的一个上停止,请执行多个设置断点必须发出命令。

可以使用删除断点和事件dbclear命令。

可以通过发出以下命令来保存所有断点并立即恢复它们bp_state=dbstatus…;dbstop(bp_state).

可选输出rline是设置断点的实数。如果指定的行不可执行,则这可能与指定的行不同。例如,如果在空行上尝试断点,则Octave将在下一个可执行行设置真正的断点。

当重新解析文件时,例如在GUI外部修改文件时,会清除文件中的所有断点。

详见: dbclear, 数据库状态, dbstep, 调试出错, debug_on_warning, debug_on_interrupt.

还支持类方法中的断点(例如。,dbstop(“@class/method”)). 但是不能在函数中设置断点(例如。,等等)或动态加载的函数(即oct文件)。

要在输入函数后立即设置断点,请使用行号1,或者完全限制行号,只给出函数名称。设置断点时,Octave将忽略前导注释块,并且断点将设置在函数中的第一条可执行语句上。例如

dbstop(“asind”,1)⇒ 29

请注意,的返回值29意味着断点被有效地设置到第29行。可以使用查询函数中断点的状态数据库状态.

 
: dbstatus
: dbstatus fcn
: bp_list = dbstatus

返回活动断点的位置。

当在没有输入或输出参数的情况下调用时,打印所有具有断点的函数的列表以及设置这些断点的行号。

如果函数名称fcn则仅返回命名函数及其子函数的断点。

可选的返回参数bp_list是一个结构体数组,包含以下字段:

名称

具有断点的函数的名称。一个子函数,比如fcn2在m文件中,比如文件.m,被指定为文件>fcn2.

文件

函数代码所在的m文件的名称。

线

具有断点的行号。

cond

断点处于活动状态必须满足的条件,或者无条件断点必须满足空字符串。

如果dbstop if错误为true,但未指定显式ID,因此值将有一个名为的空字段错误。如果指定了ID,则错误字段的每个ID将有一行。如果dbstop if错误是假的,没有错误field这个警告字段的设置类似于dbstop if警告.

详见: 设置断点, dbclear, 数据库位置, 数据列表框, dbstack.

重复使用前面的例子,dbstatus(“asind”)将返回29。然后可以使用清除列出的断点dbclear作用

 
: dbclear fcn
: dbclear fcn line
: dbclear fcn line1 line2
: dbclear line
: dbclear all
: dbclear in fcn
: dbclear in fcn at line
: dbclear if event
: dbclear ("fcn")
: dbclear ("fcn", line)
: dbclear ("fcn", line1, line2, …)
: dbclear ("fcn", line1, …)
: dbclear (line, …)
: dbclear ("all")

删除行号处的断点线在函数中fcn.

参数是

fcn

函数名称作为字符串变量。当已经处于调试模式时,可以省略此参数,并使用当前函数。

线

要删除断点的行号。多行可以作为单独的参数或作为向量给出。

事件

诸如错误, 打断警告详见设置断点详细信息)。

当在没有指定行号的情况下调用时,namedfunction中的所有断点都会被清除。

如果指定的行不是断点,则不执行任何操作。

特殊关键字全部的将清除所有文件中的所有断点。

详见: 设置断点, 数据库状态, 数据库位置.

也可以在子函数中设置断点。例如,如果一个文件包含以下函数

函数y=func1(x)y=func2(x);端函数y=func2(x)y=x+1;结束函数

然后可以在子函数的开头直接设置断点

dbstop函数1>函数2⇒ 5.

请注意,>是将子函数与包含子函数的文件区分开来的字符。

在Octave脚本中设置断点的另一种简单方法是使用键盘作用

 
: keyboard ()
: keyboard ("prompt")

停止m文件执行并进入调试模式。

键盘函数执行时,Octave打印一个提示并等待用户输入。然后对输入字符串进行评估并打印结果。这使得可以检查函数中变量的值,并在必要时赋值新值。要退出程序并返回到正常执行类型returndbcont’.这个键盘函数不返回退出状态。

如果键盘在没有参数的情况下调用,默认提示为调试>被使用。

详见: 设置断点, dbcont, dbquit.

这个键盘函数被放置在脚本中用户希望停止执行的位置。它会自动将运行脚本设置为调试模式。


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号