7.9.4 DBUG 包
MySQL 服务器和大多数 MySQL 客户端都是使用 Fred Fish 创造的DBUG
包编译的。配置了调试后,这个包使得可以获取程序正在做什么的跟踪文件。请参阅第7.9.1.2节,“创建跟踪文件”。
本节总结了在 MySQL 程序中指定调试选项的命令行参数值,这些程序已经支持调试。
可以使用DBUG
包通过将程序与--debug[=
或debug_options
]-# [
选项一起启动。如果没有指定debug_options
]debug_options
值,多数 MySQL 程序将使用默认值。服务器的默认值是 Unix 上的d:t:i:o,/tmp/mysqld.trace
和 Windows 上的d:t:i:O,\mysqld.trace
。这个默认值的效果是:
-
d
:启用所有调试宏的输出 -
t
:跟踪函数调用和退出 -
i
:在输出行中添加 PID -
o,/tmp/mysqld.trace
,O,\mysqld.trace
:设置调试输出文件。
大多数客户端程序将使用默认的debug_options
值,即 Unix 和 Windows 平台上的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
值需要具有设置受限制会话系统变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
值debug_options
是一个以冒号分隔的字段序列:
field_1:field_2:...:field_N
每个字段中的值由一个必需的标志字符组成,可能前面加上一个+
或-
字符,可能后面加上一个逗号分隔的修饰符列表:
[+|-]flag[,modifier,modifier,...,modifier]
以下表格描述了允许的标志字符。未识别的标志字符将被忽略。
Flag |
Description |
---|---|
|
为当前状态启用 In MySQL,常见的调试宏关键字是 |
|
|
|
限制调试、追踪和 profiling 到命名函数的列表中。空列表启用所有函数。需要给出适当的 |
|
为每行调试或追踪输出标识源文件名称。 |
|
为每行调试或追踪输出标识进程的PID或线程ID。 |
|
为每行调试或追踪输出标识源文件行号。 |
|
为每行调试或追踪输出打印当前函数嵌套深度。 |
|
为每行调试输出编号。 |
|
将调试输出流重定向到指定的文件。默认输出是 |
|
类似于 |
|
类似于 |
|
类似于 |
|
限制调试器操作到指定的进程。一个进程必须使用 |
|
在每行调试或跟踪输出中打印当前进程名称。 |
|
在推送新状态时,不继承之前状态的函数嵌套级别。有用 lorsque输出从左margin开始。 |
|
启用函数调用/退出跟踪行。可能后面跟随一个列表(只包含一个修改器),给出一个数字最大跟踪级别,超过该级别将不再输出调试或跟踪宏。默认是编译时选项。 |
|
在每行输出中打印当前时间戳。 |
带有+
或-
字符的前缀和修改器列表用于标志字符,如d
或f
,可以启用所有适用的修改器或仅启用一些:
-
没有带有
+
或-
的标志值将设置为exact modifier list as given。 -
带有leading
+
或-
的修饰符列表将被添加到或从当前修饰符列表中减去。
以下示例展示了对 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 |
+-----------------+
带有leading +
或 -
的修饰符列表将被添加到或从当前 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 |
+---------+
| |
+---------+