MySQL 服务器和大多数 MySQL 客户端都使用最初由 Fred Fish 创建的 DBUG
包进行编译。当您配置 MySQL 进行调试时,此包可以获取程序正在执行的操作的跟踪文件。请参阅 第 7.9.1.2 节“创建跟踪文件”。
本节概述了您可以在支持调试的 MySQL 程序的命令行调试选项中指定的参数值。
可以通过使用 --debug[=
或 debug_options
]-# [
选项调用程序来使用 debug_options
]DBUG
包。如果您指定 --debug
或 -#
选项而不指定 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
值 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]
下表描述了允许的标志字符。无法识别的标志字符将被静默忽略。
标志 |
说明 |
---|---|
|
为当前状态启用 在 MySQL 中,要启用的常见调试宏关键字包括 |
|
在每个调试器输出行之后延迟。该参数是以十分之一秒为单位的延迟,受机器性能限制。例如, |
|
将调试、跟踪和分析限制为命名的函数列表。空列表启用所有函数。仍然必须给出适当的 |
|
标识每行调试或跟踪输出的源文件名。 |
|
使用 PID 或线程 ID 标识每行调试或跟踪输出的进程。 |
|
标识每行调试或跟踪输出的源文件行号。 |
|
为每行调试或跟踪输出打印当前函数嵌套深度。 |
|
为每行调试输出编号。 |
|
将调试器输出流重定向到指定文件。默认输出为 |
|
与 |
|
与 |
|
与 |
|
将调试器操作限制在指定的进程。必须使用 |
|
为每行调试或跟踪输出打印当前进程名称。 |
|
在压入新状态时,不要继承先前状态的函数嵌套级别。在希望输出从左边距开始时很有用。 |
|
启用函数调用/退出跟踪行。后面可以跟一个列表(仅包含一个修饰符),给出最大的数字跟踪级别,超过此级别,调试或跟踪宏都不会输出任何内容。默认值是一个编译时选项。 |
|
为每行输出打印当前时间戳。 |
开头的 +
或 -
字符和末尾的修饰符列表用于标志字符,例如 d
或 f
,它们可以为所有适用的修饰符或其中一些启用调试操作。
如果没有开头的
+
或-
,则将标志值设置为与给定修饰符列表完全相同。如果开头有
+
或-
,则将列表中的修饰符添加到当前修饰符列表中或从中减去。
以下示例显示了这对 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 |
+---------+
| |
+---------+