309 MGraphics.ru - MySql - Библиотека отладчика MySQL
Уроки photoshopa


MySql

Библиотека отладчика MySQL

Условия перепечатки материалов

Рейтинг статьи: 0.000.000.000.000.00
Проголосовало 0 человек.
Оцените статью:

Библиотека отладчика MySQL

Библиотека отладчика, используемая MySQL была первоначально написана Фредом Фишом (Fred Fish). Она будет очень полезна, если Вы планируете отлаживать и/или добавлять функциональные возможности к СУБД MySQL.

Автор зачем-то приводит заголовок файла dbug.c из исходников пакета (вместе со всеми комментариями к нему). Приведу его и я, поскольку это может быть продиктовано какими-либо юридическими проблемами с копирайтом. Поскольку я не юрист, привожу этот заголовок без какого-либо перевода (во избежание ошибок или искажения смысла юридического документа при переводе).

/*************************************************************************
 *                              N O T I C E                              *
 *                                                                       *
 *                 Copyright Abandoned, 1987, Fred Fish                  *
 *                                                                       *
 *   This previously copyrighted work has been placed into the  public   *
 *   domain  by  the  author  and  may be freely used for any purpose,   *
 *   private or commercial.                                              *
 *                                                                       *
 *   Because of the number of inquiries I was receiving about the  use   *
 *   of this product in commercially developed works I have decided to   *
 *   simply make it public domain to further its unrestricted use.   I   *
 *   specifically  would  be  most happy to see this material become a   *
 *   part of the standard Unix distributions by AT&T and the  Berkeley   *
 *   Computer  Science  Research Group, and a standard part of the GNU   *
 *   system from the Free Software Foundation.                           *
 *                                                                       *
 *   I would appreciate it, as a courtesy, if this notice is  left  in   *
 *   all copies and derivative works.  Thank you.                        *
 *                                                                       *
 *   The author makes no warranty of any kind  with  respect  to  this   *
 *   product  and  explicitly disclaims any implied warranties of mer-   *
 *   chantability or fitness for any particular purpose.                 *
 *************************************************************************
*/
/*
 *  FILE
 *      dbug.c   runtime support routines for dbug package
 *
 *  SCCS
 *      @(#)dbug.c      1.25    7/25/89
 *
 *  DESCRIPTION
 *      These are the runtime support routines for the dbug package.
 *      The dbug package has two main components; the user include
 *      file containing various macro definitions, and the runtime
 *      support routines which are called from the macro expansions.
 *
 *      Externally visible functions in the runtime support module
 *      use the naming convention pattern "_db_xx...xx_", thus
 *      they are unlikely to collide with user defined function names.
 *
 *  AUTHOR(S)
 *      Fred Fish               (base code)
 *      Enhanced Software Technologies, Tempe, AZ
 *      asuvax!mcdphx!estinc!fnf
 *
 *      Binayak Banerjee        (profiling enhancements)
 *      seismo!bpa!sjuvax!bbanerje
 *
 *      Michael Widenius:
 *      DBUG_DUMP       - To dump a piece of memory.
 *      PUSH_FLAG "O"   - To be used instead of "o" if we don't
 *                        want flushing (for slow systems)
 *      Check of malloc on entry/exit (option "S")
*/

Функции библиотеки отладчика

_db_push_

Поместить в стек текущее состояние отладчика, и установить новое.

СИНТАКСИС: VOID _db_push_ (control) char *control;

ОПИСАНИЕ:

По указателю в параметре "control" на строку управления отладкой помещает в стек текущее состояние отладки, анализирует строку управления и устанавливает новое состояние отладки.

Единственный атрибут нового состояния, унаследованного из предыдущего состояния, это текущая функция вложенного уровня. Это может быть отменено, используя флажок "r" в строке управления.

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

<field_1><field_2><field_N>

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

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

Символы флажка отладки:

d Разрешает вывод из макроса DBUG_ для текущего состояния. Может сопровождаться списком ключевых слов, который разрешает вывод только для DBUG макрокоманд с соответствующим ключевым словом. Пустой список ключевых слов подразумевает вывод для всех макрокоманд.
D Ждать после каждой выведенной отладчиком строки. Аргумент задает число десятых долей секунды, которое нужно ждать. Например, -#D,20 задает паузу в 2 секунды.
f Ограничивает отладку и/или трассировку списком имен функций. Обратите внимание, что пустой список отключит все функции. Соответствующий флажок "d" или "t" должен все же быть дан, поскольку этот флажок только ограничивает их действие, если они включены.
F Идентифицируют имя исходного файла для каждой строки отладки или трассирует вывод.
i Идентифицируют процесс с pid для каждой строки отладки или трассирует вывод.
g Включить профилирование. Создайте файл 'dbugmon.out', содержащий информацию, которая может использоваться, чтобы профилировать программу. Может сопровождаться списком ключевых слов, которые выбирают профилирование только для функций в этом списке. Пустой список подразумевает, что все функции подлежат профилированию.
L Идентифицирует номер строки исходного файла для каждой строки отладки или трассирует вывод.
n Выводит текущую глубину вложенности функции для каждой строки отладки или трассирует вывод.
N Номер каждой строки вывода отладки.
o Переназначает выходной поток отладчика в файл. По умолчанию задан stderr.
O То же, что и o, но файл сбрасывается между записями. То есть, после каждой записи файл закрывается, и снова открывается только перед следующей записью. Тормозит, конечно, кошмарно, но зато гарантирует сохранность данных в этом файле на случай слета системы. Что при отладке не бесполезно...
p Ограничивает действия отладчика определенными процессами. Процесс должен быть указан в макросе DBUG_PROCESS и совпадать с одной из записей в списке действий отладчика.
P Выводит имя текущего процесса для каждой строки отладки или трассирует вывод.
r При установке нового состояния отладки не наследует предыдущее состояние вложенности функции. Полезно, когда вывод должен начаться в левом поле.
S Функция _sanity(_file_, _line_) для каждой отлаживаемой функции до _sanity() возвращает отличное от 0 значение. Обычно используется с safemalloc. Как задается это значение, и что оно вообще значит в документации не сказано (!!!), а опытным путем это установить не удалось.
t Включить функцию трассировки строк вызова и выхода (call/exit). Может сопровождаться списком, содержащим число номер максимального уровня трассировки, вне которого никакого вывода не произойдет для отладочных или трассировочных макрокоманд. Умолчание задается при компиляции.

Некоторые примеры строк управления отладкой:

  -#d:t
  -#d:f,main,subr1:F:L:t,20
  -#d,input,output,files:n

_db_pop_

ОПИСАНИЕ:

Извлекает из стека отладки последнее записанное туда состояние отладки и устанавливает в него состояние отладки. Обратите внимание, что извлечение будет терпеть неудачу, если оно удалит последнее имеющее силу состояние из стека. Это предотвращает ошибки пользователя в последовательности действий со стеком из отладчика.

_db_enter_

СИНТАКСИС:

  VOID _db_enter_ (_func_, _file_, _line_, _sfunc_, _sfile_, _slevel_,
                   _sframep_)
  char *_func_;           points to current function name
  char *_file_;           points to current file name
  int _line_;             called from source line number
  char **_sfunc_;         save previous _func_
  char **_sfile_;         save previous _file_
  int *_slevel_;          save previous nesting level
  char ***_sframep_;      save previous frame pointer

ОПИСАНИЕ:

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

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

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

_db_return_

СИНТАКСИС:

  VOID _db_return_ (_line_, _sfunc_, _sfile_, _slevel_)
  int _line_;             current source line number
  char **_sfunc_;         where previous _func_ is to be retrieved
  char **_sfile_;         where previous _file_ is to be retrieved
  int *_slevel_;          where previous level was stashed

ОПИСАНИЕ:

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

_db_pargs_

Параметры файла протокола для последующего использования _db_doprnt_().

СИНТАКСИС:

  VOID _db_pargs_ (_line_, keyword)
  int _line_;
  char *keyword;

ОПИСАНИЕ:

Новая универсальная макрокоманда печати DBUG_PRINT, которая заменяет все формы макрокоманд DBUG_N, нуждается в двух обращениях к подпрограммам поддержки во время выполнения. Первая, это функция, которая запоминает параметры, которые используются последующим обращением для _db_doprnt_().

_db_doprnt_

Печать дескриптора строк отладки.

СИНТАКСИС:

  VOID _db_doprnt_ (format, va_alist)
  char *format;
  va_dcl;

ОПИСАНИЕ:

Когда вызывается через одну из DBUG макрокоманд, проверяет текущий набор ключевых слов, вызывая _db_pargs_() чтобы узнать, была ли эта макрокоманда выбрана для обработки через строку управления отладчика, и если так, печатает аргументы с помощью форматированной строки. Номер строки DBUG макрокоманды в источнике найден в u_line.

Обратите внимание, что строка формата (format) НЕ ДОЛЖНА включить завершение строки (n), это делается автоматически.

_db_dump_

Выполняет дамп строки, пока не найдет '

Разместил: Vulko
Опубликовано: 15.02.2004
Статья "MySql - Библиотека отладчика MySQL" прочтена 8362 раза.





Последние новости