Spec-Zone.ru › MySQL 9.2

7.9.4 Пакет DBUG

Сервер MySQL и большинство клиентов MySQL скомпилированы с пакетом DBUG, первоначально созданным Фредом Фишем. При настройке MySQL для отладки этот пакет позволяет получить файл трассировки того, что делает программа. См. Раздел 7.9.1.2, «Создание файлов трассировки».

В этом разделе обобщены значения аргументов, которые можно указать в параметрах отладки в командной строке для программ MySQL, скомпилированных с поддержкой отладки.

Пакет DBUG можно использовать, вызвав программу с опцией --debug[=debug_options] или -# [debug_options]. Если вы укажете опцию --debug или -# без значения debug_options, большинство программ MySQL используют значение по умолчанию. Значение по умолчанию для сервера — d:t:i:o,/tmp/mysqld.trace в Unix и d:t:i:O,\mysqld.trace в Windows. Эффект этого значения по умолчанию:

  • d: Включить вывод для всех макросов отладки

  • t: Отслеживать вызовы и завершения функций

  • i: Добавлять PID к строкам вывода

  • o,/tmp/mysqld.trace, O,\mysqld.trace: Установить файл вывода отладки.

Большинство клиентских программ используют значение по умолчанию для debug_options, равное d:t:o,/tmp/program_name.trace, независимо от платформы.

Ниже приведены примеры строк управления отладкой, как они могут быть указаны в командной строке оболочки:

--debug=d:t
--debug=d:f,main,subr1:F:L:t,20
--debug=d,input,output,files:n
--debug=d:t:i:O,\\mysqld.trace

Для mysqld также можно изменить настройки DBUG во время выполнения, задав системную переменную debug. Эта переменная имеет глобальные и сессионные значения:

mysql> SET GLOBAL debug = 'debug_options';
mysql> SET SESSION debug = 'debug_options';

Изменение глобального значения debug требует привилегий, достаточных для установки глобальных системных переменных. Изменение сессионного значения debug требует привилегий, достаточных для установки ограниченных сессионных системных переменных. См. Раздел 7.1.9.1, «Привилегии на системные переменные».

Значение debug_options представляет собой последовательность полей, разделенных двоеточием:

field_1:field_2:...:field_N

Каждое поле в значении состоит из обязательного символа флага, необязательно предваряемого символом + или -, и необязательно сопровождаемого списком модификаторов, разделенных запятыми:

[+|-]flag[,modifier,modifier,...,modifier]

В следующей таблице описаны разрешенные символы флагов. Нераспознанные символы флагов игнорируются.

Флаг

Описание

d

Включить вывод из макросов DBUG_XXX для текущего состояния. За ним может следовать список ключевых слов, который включает вывод только для макросов DBUG с этим ключевым словом. Пустой список ключевых слов включает вывод для всех макросов.

В MySQL распространенными ключевыми словами макросов отладки для включения являются enter, exit, error, warning, info и loop.

D

Задержка после каждой строки вывода отладчика. Аргумент — задержка в десятых долях секунды, в зависимости от возможностей машины. Например, D,20 задает задержку в две секунды.

f

Ограничить отладку, трассировку и профилирование списком именованных функций. Пустой список включает все функции. Необходимые флаги d или t должны быть указаны; этот флаг ограничивает их действия только при их включении.

F

Указать имя файла источника для каждой строки вывода отладки или трассировки.

i

Указать процесс с помощью PID или идентификатора потока для каждой строки вывода отладки или трассировки.

L

Указать номер строки файла источника для каждой строки вывода отладки или трассировки.

n

Выводить текущую глубину вложенности функций для каждой строки вывода отладки или трассировки.

N

Нумеровать каждую строку вывода отладки.

o

Перенаправить поток вывода отладчика в указанный файл. Файл по умолчанию — stderr.

O

Как o, но файл действительно сбрасывается между каждым записыванием. При необходимости файл закрывается и открывается заново между каждым записыванием.

a

Как o, но открывается для добавления.

A

Как O, но открывается для добавления.

p

Ограничить действия отладчика указанными процессами. Процесс должен быть идентифицирован с помощью макроса DBUG_PROCESS и соответствовать одному из списка для выполнения действий отладчика.

P

Выводить текущее имя процесса для каждой строки вывода отладки или трассировки.

r

При нажатии на новую запись не унаследовать уровень вложенности функции предыдущего состояния. Полезно, когда вывод должен начинаться с левого края.

t

Включить строки трассировки вызова/завершения функции. За ним может следовать список (содержащий только один модификатор), задающий максимальный уровень трассировки в числовом выражении, после которого никакой вывод не происходит для макросов отладки или трассировки. По умолчанию это опция времени компиляции.

T

Выводить текущую метку времени для каждой строки вывода.

Ведущий символ + или - и последующий список модификаторов используются для символов флагов, таких как d или f, которые могут включить операцию отладки для всех применимых модификаторов или только для некоторых из них:

  • Без ведущего + или - значение флага устанавливается ровно в указанный список модификаторов.

  • С ведущим + или - модификаторы в списке добавляются к или вычитаются из текущего списка модификаторов.

Следующие примеры показывают, как это работает для флага d. Пустой список d включал вывод для всех макросов отладки. Непустой список включает вывод только для макросов в списке.

Эти операторы устанавливают значение d в указанный список модификаторов:

mysql> SET debug = 'd';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| d       |
+---------+
mysql> SET debug = 'd,error,warning';
mysql> SELECT @@debug;
+-----------------+
| @@debug         |
+-----------------+
| d,error,warning |
+-----------------+

Ведущий + или - добавляет к или вычитает из текущего значения d:

mysql> SET debug = '+d,loop';
mysql> SELECT @@debug;
+----------------------+
| @@debug              |
+----------------------+
| d,error,warning,loop |
+----------------------+

mysql> SET debug = '-d,error,loop';
mysql> SELECT @@debug;
+-----------+
| @@debug   |
+-----------+
| d,warning |
+-----------+

Добавление к “все макросы включены” не приводит к изменениям:

mysql> SET debug = 'd';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| d       |
+---------+

mysql> SET debug = '+d,loop';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| d       |
+---------+

Отключение всех включенных макросов полностью отключает флаг d:

mysql> SET debug = 'd,error,loop';
mysql> SELECT @@debug;
+--------------+
| @@debug      |
+--------------+
| d,error,loop |
+--------------+

mysql> SET debug = '-d,error,loop';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
|         |
+---------+

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/dbug-package.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API