13.3 Точки останова
Точки останова можно установить в любой функции m-файла с помощью функции dbstop.
-
: 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 — имя функции в текущем
path. Если отладчик уже запущен, аргумент fcn можно опустить — будет использована текущая функция. Точки останова в подфункциях устанавливаются с помощью оператора области видимости ‘>’. Например, если в file.m есть подфункцияfcn2, то точку останова вfcn2можно задать с помощьюfile>fcn2.line — номер строки, на которой нужно остановиться. Если line не указан, по умолчанию выбирается первая исполняемая строка файла fcn.m. В одной команде можно указать несколько строк; при использовании синтаксиса функции номера строк также можно передать одним векторным аргументом (
[line1, line2, …]).condition — любое выражение Octave, которое можно вычислить в контексте кода, существующем в точке останова. При достижении точки останова вычисляется condition, и выполнение останавливается, если условие истинно. Если condition невозможно вычислить, например из-за обращения к неопределённой переменной, будет выдана ошибка. Выражения с побочными эффектами (например,
y++ > 1) изменяют переменные, поэтому их обычно следует избегать. Условия, содержащие кавычки (‘"’, ‘'’) или символы комментариев (‘#’, ‘%’), необходимо заключать в кавычки. (Это не относится к условиям, введённым через контекстное меню редактора.) Например:dbstop in axis at 246 if 'any (opt == "x")'
Форма с указанием event не устанавливает конкретную точку останова в заданной функции и на заданной строке. Вместо этого она переводит Octave в режим отладки при возникновении определённых непредвиденных событий. Возможные значения:
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можно указать строку с идентификатором ошибки или предупреждения. В этом случае выполнение будет останавливаться только при возникновении ошибок с указанным идентификатором. Чтобы остановиться при возникновении ошибки с одним из нескольких идентификаторов, необходимо выполнить несколько командdbstop.Точки останова и события можно удалить с помощью команды
dbclearс тем же синтаксисом.Все точки останова можно сохранить и восстановить одновременно, выполнив команды
bp_state = dbstatus; …; dbstop (bp_state).Необязательный выходной аргумент rline содержит фактический номер строки, на которой установлена точка останова. Он может отличаться от указанного номера, если строка не является исполняемой. Например, если попытаться установить точку останова на пустой строке, Octave установит её на следующей исполняемой строке.
При повторном разборе файла, например после его изменения вне графического интерфейса, все точки останова в этом файле удаляются.
См. также: 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.
- : dbstatus
-
: dbstatus
fcn -
:
bp_list =dbstatus… -
Сообщает расположение активных точек останова.
Если функция вызвана без входных и выходных аргументов, выводит список всех функций с точками останова и номера строк, на которых они установлены.
Если указано имя функции fcn, выводятся только точки останова для этой функции и её подфункций.
Необязательный возвращаемый аргумент bp_list — это массив структур со следующими полями:
- name
-
Имя функции, в которой установлена точка останова. Подфункция, например
fcn2в m-файле file.m, указывается какfile>fcn2. - file
-
Имя m-файла, в котором находится код функции.
- line
-
Номер строки с точкой останова.
- cond
Условие, которое должно быть выполнено, чтобы точка останова была активна, либо пустая строка для безусловных точек останова.
Если
dbstop if errorимеет значение true, но явные идентификаторы не указаны, возвращаемое значение будет содержать пустое поле с именем"errs". Если идентификаторы указаны, полеerrsбудет содержать по одной строке на каждый идентификатор. Еслиdbstop if errorимеет значение false, поле"errs"отсутствует. Поле"warn"задаётся аналогичным образом командойdbstop if warning.
В предыдущем примере 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") -
Удаляет точку останова на строке line функции fcn.
Аргументы:
- fcn
-
Имя функции в виде строковой переменной. Если отладчик уже запущен, этот аргумент можно опустить — будет использована текущая функция.
- line
-
Номер строки, с которой нужно удалить точку останова. Можно указать несколько номеров строк в виде отдельных аргументов или вектора.
- event
Событие, например
error,interruptилиwarning(подробности см. вdbstop).
Если номер строки не указан, удаляются все точки останова в заданной функции.
Если на указанной строке нет точки останова, никаких действий не выполняется.
Специальное ключевое слово
"all"удаляет все точки останова во всех файлах.
Точку останова можно установить и в подфункции. Например, если файл содержит функции
function y = func1 (x) y = func2 (x); endfunction function y = func2 (x) y = x + 1; endfunction
то точку останова в начале подфункции можно установить непосредственно с помощью
dbstop func1>func2 ⇒ 5
Обратите внимание, что символ ‘>’ отличает подфункции от содержащего их m-файла.
Ещё один простой способ установить точку останова в скрипте Octave — использовать функцию keyboard.
-
: keyboard
() -
: keyboard
("prompt") -
Останавливает выполнение m-файла и запускает режим отладки.
При выполнении функции
keyboardOctave выводит приглашение и ожидает ввода пользователя. Введённые строки вычисляются, а результаты выводятся на экран. Это позволяет проверять значения переменных внутри функции и при необходимости присваивать им новые значения. Чтобы выйти из приглашения и продолжить обычное выполнение, введите ‘return’ или ‘dbcont’. Функцияkeyboardне возвращает код завершения.Если
keyboardвызвана без аргументов, используется приглашение по умолчанию ‘debug> ’.
Функцию keyboard помещают в скрипт в том месте, где пользователь хочет остановить выполнение. Она автоматически переводит выполняемый скрипт в режим отладки.
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Breakpoints.html