E.3 Пакет DBUG

Сервер MySQL и большинство клиентов MySQL компилируются с пакетом DBUG, автором первой версии которого является Фред Фиш (Fred Fish). При конфигурации MySQL в отладочном режиме этот пакет дает возможность получить трассировочный файл для отладки программы. See section E.1.2 Создание трассировочных файлов.

Чтобы воспользоваться пакетом отладки, следует в вызове программы задать опцию --debug="..." или -#...

Большинство программ MySQL по умолчанию имеют отладочную строку, которая будет использована, если не задана опция --debug. По умолчанию трассировочный файл обычно находится в `/tmp/имя_программы.trace' под Unix и в `\имя_программы.trace' под Windows.

Строка управления отладкой представляет собой последовательность разделенных двоеточиями полей, как в следующем примере:

<field_1>:<field_2>:...:<field_N>

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

flag[,modifier,modifier,...,modifier]

В настоящее время распознаются следующие символы флагов:

Флаг Описание
d Разрешает вывод из макроса DBUG_<N> для текущего состояния. За этим флагом может следовать список ключевых слов. Если задан такой список, то из вывода макроса DBUG будет выбираться вывод только с данными ключевыми словами. Если задан пустой список ключевых слов, выбирается вывод всего макроса.
D Задает задержку вывода после каждой строки отладчика. Аргумент представляет собой количество десятых долей секунд задержки в соответствии с возможностями машины. Т.е. D,20 означает задержку в две секунды.
f Ограничивает отладку и/или трассировку и профайлинг только перечисленными в списке функциями. Обратите внимание: если задан нулевой список, то будут заблокированы все функции. Соответствующие флаги "d" или "t" должны также задаваться, данный флаг только ограничивает их действия, если они разрешены.
F Идентифицирует имя исходного файла для каждой строки вывода отладки или трассировки.
i Идентифицирует процесс указанием pid или идентификатором потока (thread id) в каждой строке вывода отладки или трассировки.
g Разрешает профайлинг. Создает файл с именем `dbugmon.out', содержащий информацию, которую можно использовать для профайлинга программы. За этим флагом может следовать список ключевых слов; если такой список задан, то профайлинг будет применяться только для функций из этого списка. Если задан нулевой список ключевых слов, то профайлинг применяется ко всем функциям.
L Идентифицирует номер строки исходного файла для каждой строки вывода отладки или трассировки.
n Задает вывод глубины вложенности текущей функции для каждой строки вывода отладки или трассировки.
N Задает нумерацию каждой строки в выводе dbug.
o Переадресует выходной поток отладчика в указанный файл. По умолчанию вывод осуществляется в stderr.
O То же, что и o, но указанный файл сбрасывается на диск каждый раз между операциями записи. При необходимости этот файл закрывается и снова открывается каждый раз между операциями записи.
p Ограничивает действия отладчика указанным процессом. Процесс должен быть идентифицирован макросом DBUG_PROCESS и совпадать с указанным в списке для действий отладчика.
P Выводит имя текущего процесса для каждой строки вывода отладки или трассировки.
r Не наследовать уровень вложенности функции в предыдущем состоянии при переходе в новое состояние. Полезно, если вывод должен начинаться с левого поля.
S Выполнять функцию _sanity(_file_,_line_) для каждой отлаженной функции, пока _sanity() не возвратит значение, отличное от 0. (Главным образом используется совместно с safemalloc для определения утечек памяти).
t Разрешает трассировку вызовов функций/выход из функций. За этим параметром может следовать список (содержащий только один модификатор). Данный модификатор задает число - максимальный уровень вложения функций, ниже которого не производится вывод ни для отладочного, ни для трассировочного макросов. Параметр по умолчанию задается во время компиляции.

Ниже представлены некоторые примеры строк управления отладкой, которые можно применять в командной строке оболочки (символ "-#" обычно используется для внедрения управляющей строки в программу):

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

В MySQL обычно применяются следующие дескрипторы для вывода (совместно с опцией d): enter,exit,error,warning,info и loop.