文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


7.9.4 DBUG 包

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.traceO,\mysqld.trace:设置调试输出文件。

无论平台如何,大多数客户端程序都使用默认的 debug_optionsd: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]

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

标志

说明

d

为当前状态启用 DBUG_XXX 宏的输出。后面可以跟一个关键字列表,该列表仅为具有该关键字的 DBUG 宏启用输出。空的关键字列表将启用所有宏的输出。

在 MySQL 中,要启用的常见调试宏关键字包括 enterexiterrorwarninginfoloop

D

在每个调试器输出行之后延迟。该参数是以十分之一秒为单位的延迟,受机器性能限制。例如,D,20 指定延迟两秒。

f

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

F

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

i

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

L

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

n

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

N

为每行调试输出编号。

o

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

O

o 类似,但在每次写入之间都会真正刷新文件。必要时,将在每次写入之间关闭并重新打开文件。

a

o 类似,但以追加模式打开。

A

O 类似,但以追加模式打开。

p

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

P

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

r

在压入新状态时,不要继承先前状态的函数嵌套级别。在希望输出从左边距开始时很有用。

t

启用函数调用/退出跟踪行。后面可以跟一个列表(仅包含一个修饰符),给出最大的数字跟踪级别,超过此级别,调试或跟踪宏都不会输出任何内容。默认值是一个编译时选项。

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