Spec-Zone.ru › Octave 8

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 истинно. Если 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 могут быть дополнены строкой, указывающей идентификатор ошибки или предупреждения. В этом случае выполнение остановится только при ошибках с указанным идентификатором. Для остановки на одном из набора идентификаторов необходимо выдать несколько команд 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 истинно, но явные идентификаторы не указаны, возвращаемое значение будет иметь пустое поле, называемое "errs". Если идентификаторы указаны, поле errs будет содержать одну строку на каждый идентификатор. Если dbstop if error ложно, поля "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–2023 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/v8.1.0/Breakpoints.html

Spec-Zone.ru

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