Сервер MySQL и большинство клиентов MySQL компилируются с пакетом DBUG
,
автором первой версии которого является Фред Фиш (Fred Fish). При
конфигурации MySQL в отладочном режиме этот пакет дает возможность
получить трассировочный файл для отладки программы. See Раздел D.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
.