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.
Используя предыдущий пример, 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/v7.2.0/Breakpoints.html