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/v8.1.0/Breakpoints.html