Spec-Zone.ru › Octave 7

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

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

: dbstop func ¶
: dbstop func line ¶
: dbstop func line1 line2 … ¶
: dbstop line1 … ¶
: dbstop in func ¶
: dbstop in func at line ¶
: dbstop in func at line if "condition" ¶
: dbstop in class at method ¶
: dbstop if event ¶
: dbstop if 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 in func ¶
: dbclear in func at line ¶
: dbclear if 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/v7.2.0/Breakpoints.html

Spec-Zone.ru

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