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