可以使用在任何m文件函数中设置断点dbstop作用
fcn ¶fcn line ¶fcn line1 line2 … ¶line1 … ¶in fcn ¶in fcn at line ¶in fcn at line if "condition" ¶in class at method ¶if event ¶if event ID ¶(bp_struct) ¶rline = dbstop … ¶为内置调试器设置断点。
fcn是当前上的函数的名称path。在调试模式下准备就绪时fcn参数可以省略,将使用current函数。子函数的断点是用scopeoperator设置的>’. 例如,如果文件m有一个子函数fcn2,然后是中的断点fcn2可以从指定file>fcn2.
line是要打断的行号。如果line未指定,它默认为文件中的第一个可执行行fcn.m。在一个命令中可以指定多行;当使用函数语法时,行也可以作为单个向量参数传递([line1, line2, …]).
condition是可以在断点处存在的代码上下文中计算的任何Octave表达式。当遇到断点时,condition将进行评估,如果condition是真的。如果condition无法计算,例如,因为它引用了未定义的变量,将引发错误。具有副作用的表达式(例如y++ > 1)将改变变量,通常应避免。包含引号的条件(’,‘)或注释字符(#’, ‘%)必须随附询价单。(这不适用于从编辑器的上下文菜单输入的条件。)例如:
dbstop in axis at 246 if 'any (opt == "x")'
指定的表格event不会在给定的函数和行号处导致特定的断点。相反,当遇到某些意外事件时,它会导致进入调试模式。可能的值为
error报告错误时停止。这相当于同时指定debug_on_error (true)和debug_on_interrupt (true).
caught error当try-catch块(尚未实现)捕获到错误时停止。
interrupt中断时停止(Ctrl-C)发生。
naninf当代码返回非有限值(尚未实现)时停止。
warning返回警告时停止。这相当于指定debug_on_warning (true).
事件error, caught error和warning都可以后跟一个指定错误ID或警告ID的字符串。如果这样做,只有具有指定ID的错误才会导致执行停止。要在一组ID中的一个上停止,请执行多个dbstop必须发出命令。
可以使用删除断点和事件dbclear命令。
可以通过发出以下命令来保存所有断点并立即恢复它们bp_state = dbstatus; …; dbstop (bp_state).
可选输出rline是设置断点的实数。如果指定的行不可执行,则这可能与指定的行不同。例如,如果在空行上尝试断点,则Octave将在下一个可执行行设置真正的断点。
当重新解析文件时,例如在GUI外部修改文件时,会清除文件中的所有断点。
详见: dbclear, dbstatus, dbstep, debug_on_error, debug_on_warning, debug_on_interrupt.
还支持类方法中的断点(例如。,dbstop ("@class/method")). 但是不能在函数中设置断点(例如。,sin等等)或动态加载的函数(即oct文件)。
要在输入函数后立即设置断点,请使用行号1,或者完全限制行号,只给出函数名称。设置断点时,Octave将忽略前导注释块,并且断点将设置在函数中的第一条可执行语句上。例如
dbstop ("asind", 1)
⇒ 29
请注意,的返回值29意味着断点被有效地设置到第29行。可以使用查询函数中断点的状态dbstatus.
fcn ¶bp_list = dbstatus … ¶返回活动断点的位置。
当在没有输入或输出参数的情况下调用时,打印所有具有断点的函数的列表以及设置这些断点的行号。
如果函数名称fcn则仅返回命名函数及其子函数的断点。
可选的返回参数bp_list是一个结构体数组,包含以下字段:
具有断点的函数的名称。一个子函数,比如fcn2在m文件中,比如文件.m,被指定为file>fcn2.
函数代码所在的m文件的名称。
具有断点的行号。
断点处于活动状态必须满足的条件,或者无条件断点必须满足空字符串。
如果dbstop if error为true,但未指定显式ID,因此值将有一个名为的空字段"errs"。如果指定了ID,则errs字段的每个ID将有一行。如果dbstop if error是假的,没有"errs"field这个"warn"字段的设置类似于dbstop if warning.
重复使用前面的例子,dbstatus ("asind")将返回29。然后可以使用清除列出的断点dbclear作用
fcn ¶fcn line ¶fcn line1 line2 … ¶line … ¶all ¶in fcn ¶in fcn at line ¶if event ¶("fcn") ¶("fcn", line) ¶("fcn", line1, line2, …) ¶("fcn", line1, …) ¶(line, …) ¶("all") ¶删除行号处的断点line在函数中fcn.
参数是
函数名称作为字符串变量。当已经处于调试模式时,可以省略此参数,并使用当前函数。
要删除断点的行号。多行可以作为单独的参数或作为向量给出。
诸如error, interrupt或warning详见dbstop详细信息)。
当在没有指定行号的情况下调用时,namedfunction中的所有断点都会被清除。
如果指定的行不是断点,则不执行任何操作。
特殊关键字"all"将清除所有文件中的所有断点。
也可以在子函数中设置断点。例如,如果一个文件包含以下函数
function y = func1 (x) y = func2 (x); endfunction function y = func2 (x) y = x + 1; endfunction
然后可以在子函数的开头直接设置断点
dbstop func1>func2 ⇒ 5
请注意,>是将子函数与包含子函数的文件区分开来的字符。
在Octave脚本中设置断点的另一种简单方法是使用keyboard作用
() ¶("prompt") ¶停止m文件执行并进入调试模式。
当keyboard函数执行时,Octave打印一个提示并等待用户输入。然后对输入字符串进行评估并打印结果。这使得可以检查函数中变量的值,并在必要时赋值新值。要退出程序并返回到正常执行类型return或dbcont’.这个keyboard函数不返回退出状态。
如果keyboard在没有参数的情况下调用,默认提示为调试>被使用。
这个keyboard函数被放置在脚本中用户希望停止执行的位置。它会自动将运行脚本设置为调试模式。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2