Spec-Zone.ru › Octave 9

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.

См. также: dbstop, dbclear, dbwhere, dblist, 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")

Удаляет точку останова на строке line функции fcn.

Аргументы:

fcn

Имя функции в виде строковой переменной. Если отладчик уже запущен, этот аргумент можно опустить — будет использована текущая функция.

line

Номер строки, с которой нужно удалить точку останова. Можно указать несколько номеров строк в виде отдельных аргументов или вектора.

event

Событие, например error, interrupt или warning (подробности см. в dbstop).

Если номер строки не указан, удаляются все точки останова в заданной функции.

Если на указанной строке нет точки останова, никаких действий не выполняется.

Специальное ключевое слово "all" удаляет все точки останова во всех файлах.

См. также: dbstop, dbstatus, dbwhere.

Точку останова можно установить и в подфункции. Например, если файл содержит функции

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-файла и запускает режим отладки.

При выполнении функции keyboard Octave выводит приглашение и ожидает ввода пользователя. Введённые строки вычисляются, а результаты выводятся на экран. Это позволяет проверять значения переменных внутри функции и при необходимости присваивать им новые значения. Чтобы выйти из приглашения и продолжить обычное выполнение, введите ‘return’ или ‘dbcont’. Функция keyboard не возвращает код завершения.

Если keyboard вызвана без аргументов, используется приглашение по умолчанию ‘debug> ’.

См. также: dbstop, dbcont, dbquit.

Функцию 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API