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 |
+---------+
| |
+---------+