Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

d

为当前状态启用DBUG_XXX宏的输出。可能后跟关键字列表,这样只启用与该关键字相关的 DBUG 宏的输出。空关键字列表启用所有宏的输出。

In MySQL,常见的调试宏关键字是enterexiterrorwarninginfoloop

D

D每行调试输出后延迟。参数是延迟时间,单位为十分之一秒,受机器能力限制。例如,D,20指定延迟两秒。

f

限制调试、追踪和 profiling 到命名函数的列表中。空列表启用所有函数。需要给出适当的dt标志;这只限制它们的操作,如果它们已启用。

F

为每行调试或追踪输出标识源文件名称。

i

为每行调试或追踪输出标识进程的PID或线程ID。

L

为每行调试或追踪输出标识源文件行号。

n

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

N

为每行调试输出编号。

o

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

O

类似于o,但文件在每次写入时真正地刷新。当需要时,文件将被关闭并重新打开。

a

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

A

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

p

限制调试器操作到指定的进程。一个进程必须使用DBUG_PROCESS宏标识,并且与列表中的一个匹配,以便调试器操作发生。

P

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

r

在推送新状态时,不继承之前状态的函数嵌套级别。有用 lorsque输出从左margin开始。

t

启用函数调用/退出跟踪行。可能后面跟随一个列表(只包含一个修改器),给出一个数字最大跟踪级别,超过该级别将不再输出调试或跟踪宏。默认是编译时选项。

T

在每行输出中打印当前时间戳。

带有+-字符的前缀和修改器列表用于标志字符,如df,可以启用所有适用的修改器或仅启用一些:

  • 没有带有+-的标志值将设置为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 |
+---------+
|         |
+---------+