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
.