Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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 程序将使用默认值。服务器的默认值是 d:t:i:o,/tmp/mysqld.trace 在 Unix 上和 d:t:i:O,\mysqld.trace 在 Windows 上。该默认值的效果是:

  • d:启用所有调试宏的输出

  • t:跟踪函数调用和退出

  • i:将 PID 添加到输出行

  • o,/tmp/mysqld.traceO,\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]

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

标志

描述

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

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

leading +- 字符和尾随的修饰符列表用于标志字符,如 df,可以启用所有适用修饰符的调试操作或只是其中的一些:

  • 没有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 |
+---------+
|         |
+---------+