MySQL 服务器和大多数 MySQL 客户端都是使用 Fred Fish 创建的 DBUG 软件包编译的。当您为 MySQL 配置了调试时,这个软件包使得可以获取程序执行的跟踪文件。请参阅 第 7.9.1.2 节,“创建跟踪文件”。
本节总结了可以在命令行上指定的调试选项参数,以便在具有调试支持的 MySQL 程序中使用。
可以通过在命令行上使用 --debug[=
或 debug_options
]-# [
选项来使用 DBUG 软件包。如果您指定了 debug_options
]--debug
或 -#
选项,但没有指定 debug_options
值,大多数 MySQL 程序将使用默认值。服务器的默认值是 d:t:i:o,/tmp/mysqld.trace
在 Unix 上和 d:t:i:O,\mysqld.trace
在 Windows 上。该默认值的效果是:
-
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,也可以在运行时更改 DBUG 设置,方法是设置 debug
系统变量。该变量具有全局和会话值:
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。 |
|
在每行调试或跟踪输出中标识源文件行号。 |
|
在每行调试或跟踪输出中打印当前函数嵌套深度。 |
|
对每行调试输出进行编号。 |
|
将调试器输出流重定向到指定文件。默认输出是 |
|
类似于 |
|
类似于 |
|
类似于 |
|
仅将调试器操作限制为指定的进程。进程必须使用 |
|
在每行调试或跟踪输出中打印当前进程名称。 |
|
在推送新状态时,不继承之前状态的函数嵌套级别。当输出要从左边距开始时非常有用。 |
|
启用函数调用/退出跟踪行。可以跟随一个列表(仅包含一个修饰符),指定数字最大跟踪级别,超过该级别将不输出调试或跟踪宏的输出。默认是编译时选项。 |
|
为每行输出打印当前时间戳。 |
leading +
或 -
字符和尾随的修饰符列表用于标志字符,如 d
或 f
,可以启用所有适用修饰符的调试操作或只是其中的一些:
-
没有leading
+
或-
,标志值将被设置为 exactly 修饰符列表。 -
带有leading
+
或-
,列表中的修饰符将被添加到或从当前修饰符列表中减去。
以下示例显示了如何使用 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 |
+---------+
| |
+---------+