Spec-Zone.ru › Octave 6

13.3 Точки останова

Точки останова могут быть установлены в любой функции m-файла, используя функцию dbstop.

: dbstop func
: dbstop func line
: dbstop func line1 line2 …
: dbstop line1 …
: dbstop в func
: dbstop в func на строке line
: dbstop в func на строке line, если "condition"
: dbstop в class на методе method
: dbstop если event
: dbstop если event ID
: dbstop (bp_struct)
: rline = dbstop …

Установка точек останова для встроенного отладчика.

func — имя функции в текущем path. При уже активном режиме отладки аргумент func можно опустить, и будет использоваться текущая функция. Точки останова в подфункциях устанавливаются с помощью оператора области видимости ‘>’. Например, если в файле file.m есть подфункция func2, то точку останова в func2 можно указать с помощью file>func2.

line — номер строки, на которой требуется остановить выполнение. Если line не указан, по умолчанию используется первая исполняемая строка в файле func.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 func
: bp_list = dbstatus …

Вывод местоположения активных точек останова.

Без входных или выходных аргументов выводит список всех функций с точками останова и номерами строк, где они установлены.

Если указано имя функции func, то выводятся только точки останова для указанной функции и её подфункций.

Необязательный возвращаемый аргумент bp_list — массив структур с следующими полями:

name

Имя функции с точкой останова. Подфункция, например, func2 внутри m-файла, например file.m, указывается как file>func2.

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 func
: dbclear func line
: dbclear func line1 line2 …
: dbclear line …
: dbclear all
: dbclear в func
: dbclear в func на строке line
: dbclear если event
: dbclear ("func")
: dbclear ("func", line)
: dbclear ("func", line1, line2, …)
: dbclear ("func", line1, …)
: dbclear (line, …)
: dbclear ("all")

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

Аргументы:

func

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

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–2022 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/v6.4.0/Breakpoints.html

Spec-Zone.ru

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