plpdebugger. Средство отладки plpgsql#
Версия: 1.1.
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: plpgsql.
Схема размещения:
ext.
Доработка#
Не производилась.
Ограничения#
Для корректной работы pldebugger необходимо наличие plpgsql - расширения по работе с plpgsql.
Внимание!
Так как расширение позволяет перехватывать выполнение кода функций и процедур для отладки, а также видеть значения переменных и управлять процессами управления, его использование доступно только суперпользователю и не рекомендуется в промышленной среде.
Установка#
Установка расширения для ALT SP8 и Astra Linux:
sudo dnf install /usr/pangolin-6.3/3rdparty/pldebugger/pangolin-pldebugger-1.1-{OS}.x86_64.rpm -y
Для других ОС:
sudo apt-get install /usr/pangolin-6.3/3rdparty/pldebugger/pangolin-pldebugger-1.1-{OS}.x86_64.rpm -y
Для использования расширения на развернутой СУБД необходимо установить его в целевую БД:
CREATE EXTENSION pldbgapi SCHEMA ext;
Расширение может быть добавлено в shared_preload_libraries:
shared_preload_libraries = 'plugin_debugger'
В случае, если расширение используется совместно с расширением plpgsql_check, библиотека расширения должна быть указана первой при перечислении в shared_preload_libraries:
shared_preload_libraries = 'plugin_debugger,plpgsql_check'
Настройка#
Настройка не требуется.
Использование модуля#
В данном разделе будут рассмотрены введенные расширением типы данных, а также функции, предоставляемые им.
Типы данных расширения#
Типы, добавляемые расширением:
breakpoint;frame;proxyinfo;targetinfo;var.
Функции расширения#
Функция |
Входные аргументы |
Тип возвращаемого значения |
Описание |
|---|---|---|---|
|
|
|
Останавливает выполнение/отладку кода в сессии с переданным в аргументе |
|
|
|
Функция подключается к целевому объекту отладки, прослушивающему заданный порт. Клиент отладчика вызывает эту функцию в ответ на уведомление |
|
|
|
Функция отправляет команду |
|
|
Функция создает сеанс отладки. Возвращает |
|
|
|
|
Функция перезаписывает значение заданной переменной (идентифицируемой по имени и номеру строки). Аргумент |
|
|
|
Функция удаляет локальную точку останова в целевом процессе |
|
|
|
Функция возвращает набор точек останова. Каждая запись в результирующем наборе идентифицирует точку останова |
|
Отсутствуют |
|
Функция извлекает небольшую коллекцию параметров с сервера, которые связаны с версией сервера и версией протокола API, реализованного расширением для взаимодействия с ним внешних графических инструментов (например, pgAdmin). Функция может быть вызвана (из клиентского процесса отладчика), чтобы узнать, с какой версией прокси-API происходит взаимодействие - если этой функции не существует, можно предположить, что обмен данными осуществляется с прокси-API версии 1 |
|
|
|
Функция возвращает исходный код для заданной функции. Клиент отладчика всегда должен извлекать исходный код, вызывая данную функцию, вместо чтения |
|
|
|
Функция возвращает набор записей с фреймворками. Каждая запись в результирующем наборе содержит информацию об одном фреймворке стека. Каждая запись также содержит строку, которую можно использовать для отображения имени и значения каждого аргумента для конкретного вызова |
|
|
|
Устаревшая функция, которая возвращает информацию о целевой отлаживаемой функции. Используется для обратной совместимости старых версий pgAdmin. Для новых приложений получение информации из каталога происходит напрямую |
|
|
|
Функция возвращает набор записей |
|
|
|
Функция получает информацию о функции с переданным |
|
|
|
Функция изменяет цель отладчика на указанный кадр (в стеке вызовов). При остановке отладчик переключается на наиболее глубоко вложенную функцию в стеке вызовов (так как это функция, которая выполняется в данный момент времени). Цель отладчика можно изменить на другие фреймворки стека с целью получения исходного кода для этого фреймворка, значения переменных в этом фреймворке и точек останова в целевом объекте. Отладчик остается на выбранном кадре до тех пор, пока он не будет изменен пользователем или пока целевой объект не остановится на другой точке останова. Функция возвращает запись типа |
|
|
|
Функция регистрирует локальную точку останова в целевом процессе |
|
|
|
Функция регистрирует точку останова в глобальной структуре с точками останова. На вход принимает |
|
|
|
Функция отправляет команду |
|
|
|
Функция отправляет команду |
|
|
|
Функция ожидает, пока целевой объект отладки достигнет точки останова. Необходимо вызвать функцию сразу после того, как |
|
|
Функция объявляет прокси-процесс активным отладчиком, ожидающим глобальных точек останова и возвращает дескриптор сеанса, который идентифицирует конкретный сеанс отладки. Когда вызывается любая из других функций |
|
|
|
|
Обертка для функции |
Схема взаимодействия#
Отладчик состоит из трех частей:
Клиент — среда, в которой вызываются функции API (консоль psql или некоторый графический интерфейс). Отображает исходный код, текущий фреймворк стека, переменные и т.п., позволяя пользователю устанавливать точки останова и пошагово выполнять код. Клиент может находиться на другом узле, отличном от сервера базы данных (например, PgAdmin).
Целевой сервер - серверная часть, которая запускает отлаживаемый код. Библиотека
plugin_debugger.soдолжна быть загружена в целевой сервер.Отладочный прокси - дополнительный серверный процесс, к которому подключен клиент. Функции API, методы
pl_dbg*, а также библиотекиpldbgapi.so, выполняются именно на нем.
Клиент должен подключиться к отладочному прокси, используя обычное соединение libpq. Когда сеанс отладки активен, прокси вызывает функции API библиотеки plugin_debugger.so, которая в свою очередь подключается к целевому серверу на уровне ядра, прозрачным для клиента образом. Протокол между прокси и целевым сервером не видим для других пользователей. Методы pldbg_* из библиотек API предоставляют доступный интерфейс к средствам отладки.
Доступ к данным методам осуществляется при помощи SQL-функций, предоставляемых расширением и дополнительно никак не регулируется - все, кто могут аутентифицироваться в БД и имеют доступ к запуску данных функций могут перехватить выполнение любой функции в любой сессии зная ее OID. По этой причине использование данного расширения категорически не рекомендуется в промышленных средах.
Ссылки на документацию разработчика#
pldebugger: https://github.com/EnterpriseDB/pldebugger.