DB
СОДЕРЖАНИЕ
ИМЯ
DB — программный интерфейс к API отладки Perl
СИНТАКСИС
package CLIENT;
use DB;
@ISA = qw(DB);
# these (inherited) methods can be called by the client
CLIENT->register() # register a client package name
CLIENT->done() # de-register from the debugging API
CLIENT->skippkg('hide::hide') # ask DB not to stop in this package
CLIENT->cont([WHERE]) # run some more (until BREAK or
# another breakpointt)
CLIENT->step() # single step
CLIENT->next() # step over
CLIENT->ret() # return from current subroutine
CLIENT->backtrace() # return the call stack description
CLIENT->ready() # call when client setup is done
CLIENT->trace_toggle() # toggle subroutine call trace mode
CLIENT->subs([SUBS]) # return subroutine information
CLIENT->files() # return list of all files known to DB
CLIENT->lines() # return lines in currently loaded file
CLIENT->loadfile(FILE,LINE) # load a file and let other clients know
CLIENT->lineevents() # return info on lines with actions
CLIENT->set_break([WHERE],[COND])
CLIENT->set_tbreak([WHERE])
CLIENT->clr_breaks([LIST])
CLIENT->set_action(WHERE,ACTION)
CLIENT->clr_actions([LIST])
CLIENT->evalcode(STRING) # eval STRING in executing code's context
CLIENT->prestop([STRING]) # execute in code context before stopping
CLIENT->poststop([STRING])# execute in code context before resuming
# These methods will be called at the appropriate times.
# Stub versions provided do nothing.
# None of these can block.
CLIENT->init() # called when debug API inits itself
CLIENT->stop(FILE,LINE) # when execution stops
CLIENT->idle() # while stopped (can be a client event loop)
CLIENT->cleanup() # just before exit
CLIENT->output(LIST) # called to print any output that
# the API must show ОПИСАНИЕ
Информация о отладке Perl часто требуется не только отладчикам, но и модулям, которые нуждаются в некоторой "специальной" информации для правильной работы, например, профилировщикам.
Этот модуль абстрагирует и предоставляет все крючки в функциональность внутренней отладки Perl, так что различные реализации отладчиков Perl (или пакеты, которые просто хотят получить доступ к "привилегированным" данным отладки) могут все извлечь выгоду от разработки этого общего кода. В настоящее время используется в Swat, графическом отладчике perl/Tk.
Обратите внимание, что несколько "передних концов" могут одновременно подключаться к этому API отладки. Это призвано облегчить одновременную отладку с помощью командной строки и графического интерфейса, отладку отладчиков и т. д. [Звучит неплохо, но это требует серьезной поддержки — GSAR]
В частности, этот API не предоставляет следующие функции:
-
отображение данных
-
обработка команд
-
управление псевдонимами команд
-
пользовательский интерфейс (tty или графический)
Эти функции предназначены для выполнения клиентами этого API.
Этот модуль пытается быть безупречным с точки зрения use strict; и при включенных предупреждениях.
Глобальные переменные
Следующие "общедоступные" глобальные имена могут быть прочитаны клиентами этого API. Имейте в виду, что их следует рассматривать как "только для чтения".
- $DB::sub
-
Имя текущей выполняемой подпрограммы.
- %DB::sub
-
Ключи этой хеш-таблицы — имена всех известных подпрограмм. Каждое значение — закодированная строка, имеющая формат sprintf(3)
("%s:%d-%d", filename, fromline, toline). - $DB::single
-
Флаг одиночного шага. Будет истинным, если API остановится на следующей инструкции.
- $DB::signal
-
Флаг сигнала. Будет установлен в истинное значение, если был пойман сигнал. Клиенты могут проверять этот флаг, чтобы прервать длительные операции.
- $DB::trace
-
Этот флаг установлен в true, если API отслеживает вызовы подпрограмм.
- @DB::args
-
Содержит аргументы текущей подпрограммы или массив
@ARGV, если в контексте верхнего уровня. - @DB::dbline
-
Список строк в текущем загруженном файле.
- %DB::dbline
-
Действия в текущем файле (ключи — номера строк). Значения — строки, имеющие формат sprintf(3)
("%s\000%s", breakcondition, actioncode). - $DB::package
-
Пространство имен пакета текущего выполняемого кода.
- $DB::filename
-
Текущий загруженный имя файла.
- $DB::subname
-
Полное квалифицированное имя текущей выполняемой подпрограммы.
- $DB::lineno
-
Номер строки, которая будет выполнена следующей.
Методы API
Ниже приведены методы в базовом классе DB. Клиент должен получить доступ к этим методам через наследование (*не* вызывая их напрямую), так как API отслеживает клиентов через механизм наследования.
- CLIENT->register()
-
зарегистрировать объект/пакет клиента
- CLIENT->evalcode(STRING)
-
вычислить STRING в контексте выполняемого кода
- CLIENT->skippkg('D::hide')
-
попросить DB не останавливаться в этих пакетах
- CLIENT->run()
-
выполнить еще немного (до тех пор, пока не будет достигнута точка останова)
- CLIENT->step()
-
одиночный шаг
- CLIENT->next()
-
шаг через
- CLIENT->done()
-
отменить регистрацию из API отладки
Методы обратного вызова клиента
Следующие "виртуальные" методы могут быть определены клиентом. Они будут вызываться API в соответствующие моменты. Обратите внимание, что, если не указано иное, API отладки определяет только пустые, не функциональные версии этих методов по умолчанию.
- CLIENT->init()
-
Вызывается после инициализации API отладки.
- CLIENT->prestop([STRING])
-
Обычно наследуется из пакета DB. Если не передано никаких аргументов, возвращает строку действия prestop.
- CLIENT->stop()
-
Вызывается, когда выполнение останавливается (с аргументами файл, строка).
- CLIENT->idle()
-
Вызывается, когда остановлено (может быть циклом событий клиента).
- CLIENT->poststop([STRING])
-
Обычно наследуется из пакета DB. Если не передано никаких аргументов, возвращает строку действия poststop.
- CLIENT->evalcode(STRING)
-
Обычно наследуется из пакета DB. Запрашивает, чтобы строка STRING была
eval-проанализирована в контексте выполняемого кода. - CLIENT->cleanup()
-
Вызывается непосредственно перед выходом.
- CLIENT->output(LIST)
-
Вызывается, когда API нужно показать сообщение (предупреждения, ошибки и т. д.).
ОШИБКИ
Интерфейс, определенный в этом модуле, отсутствует некоторые из последних дополнений к функциональности отладки Perl. Поэтому этот интерфейс следует считать сильно экспериментальным и подверженным изменениям.
АВТОР
Gurusamy Sarathy gsar@activestate.com
Этот код сильно адаптирован из ранней версии perl5db.pl, приписываемой Лэрри Уолу и Perl-разработчикам.
© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/DB