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.
Используя предыдущий пример, 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"удалит все точки останова из всех файлов.
Точка останова также может быть установлена в подфункции. Например, если файл содержит функции
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> ’.
Функция 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