Spec-Zone.ru › MySQL 5.7

5.8.3 Пакет DBUG

Сервер MySQL и большинство клиентов MySQL компилируются с пакетом DBUG, первоначально созданным Фредом Фишем. При конфигурации MySQL для отладки этот пакет позволяет получить файл трассировки действий программы. См. раздел 5.8.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 требует привилегий, достаточных для установки ограниченных сессионных системных переменных. См. раздел 5.1.8.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-5.7-en/dbug-package.html

Spec-Zone.ru

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