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 истинно. Если 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/v9.2.0/Breakpoints.html

Spec-Zone.ru

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