• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DBUG软件包

    MySQL服务器和大多数MySQL客户端使用最初由Fred Fish创建的DBUG包进行编译。当您配置了MySQL进行调试后,该软件包可以获取程序正在执行的跟踪文件。请参见“创建跟踪文件”。

    本节总结了您可以在命令行的调试选项中为使用调试支持构建的MySQL程序指定的参数值。

    可以通过使用或选项调用程序来使用DBUG软件包。如果指定不带值的or 选项,则大多数MySQL程序都使用默认值。服务器默认值在Unix和 Windows上。此默认设置的效果是:--debug[=debug_options]-#[debug_options]--debug-#debug_optionsd:t:i:o,/tmp/mysqld.traced:t:i:O,\mysqld.trace

    • d:启用所有调试宏的输出
    • t:跟踪函数调用和退出
    • i:将PID添加到输出线
    • o,/tmp/mysqld.traceO,\mysqld.trace:设置调试输出文件。

    无论平台如何,大多数客户端程序都使用默认debug_options值。d:t:o,/tmp/program_name.trace

    以下是一些示例调试控制字符串,它们可能在shell命令行上指定:

    --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,还可以通过设置debug系统变量在运行时更改DBUG设置。此变量具有全局值和会话值:

    mysql> SET GLOBAL debug = 'debug_options';
    mysql> SET SESSION debug = 'debug_options';
    

    更改全局debug值需要足够的特权来设置全局系统变量。更改会话debug值需要足够的特权来设置受限制的会话系统变量。请参见“系统变量特权”。

    debug_options值是用冒号分隔的字段的序列:

    field_1:field_2:...:field_N
    

    值中的每个字段都包含一个强制性标志字符,可以选择在其前面加上+-字符,并可以选择在其后跟随一个逗号分隔的修饰符列表:

    [+|-]flag[,modifier,modifier,...,modifier]
    

    下表描述了允许的标志字符。无法识别的标志字符将被静默忽略。

    描述

    d

    启用来自DBUG_ XXX宏的当前状态的输出。可能紧随其后的是关键字列表,该列表仅对具有该关键字的DBUG宏启用输出。关键字列表为空时,将启用所有宏的输出。

    在MySQL中,公共调试宏关键字启用是enterexiterrorwarninginfo,和loop

    D

    每条调试器输出线之后的延迟。参数是延迟(以十分之一秒为单位),取决于机器的功能。例如,D,20指定两秒钟的延迟。

    f

    将调试,跟踪和性能分析限制为命名函数的列表。空列表将启用所有功能。仍然必须给出适当的dt标志;如果启用了此标志,则仅限制其操作。

    F

    标识调试或跟踪输出的每一行的源文件名。

    i

    使用调试或跟踪输出的每一行的PID或线程ID标识进程。

    L

    标识调试或跟踪输出的每一行的源文件行号。

    n

    打印每行调试或跟踪输出的当前函数嵌套深度。

    N

    为调试输出的每一行编号。

    o

    将调试器输出流重定向到指定的文件。默认输出为stderr

    O

    类似于o,但实际上每次写入之间都会刷新该文件。需要时,在每次写入之间关闭并重新打开文件。

    p

    将调试器操作限制为指定的进程。必须使用DBUG_PROCESS宏标识一个进程,并且该进程与列表中的一个匹配,以使调试器动作发生。

    P

    为调试或跟踪输出的每一行打印当前进程名称。

    r

    推送新状态时,请勿继承前一状态的功能嵌套级别。当输出从左边距开始时很有用。

    S

    _sanity(_file_,_line_)对每个调试函数执行函数,直到_sanity()返回不同于0的值。

    t

    启用函数调用/退出跟踪线。可能紧随其后的是一个列表(仅包含一个修饰符),该列表给出了最大跟踪级别的数值,超过该级别时,调试或跟踪宏都不会输出。默认值为编译时间选项。

    修饰符的前导+-字符和尾随列表用于标记字符,例如df可以为所有适用的修饰符或其中一些修饰符启用调试操作:

    • 如果没有前导+-,则标志值将完全设置为给定的修饰符列表。
    • +-开头,列表中的修饰符将添加到当前修饰符列表中或从当前修饰符列表中减去。

    以下示例显示了此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	|
    +---------	+
    |	|
    +---------	+
    

    上篇:LOCK_ORDER工具