文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  DBUG 套件

7.9.4 DBUG 套件

MySQL 伺服器和大多數 MySQL 用戶端是使用 Fred Fish 最初建立的 DBUG 套件編譯的。當您設定 MySQL 進行偵錯時,此套件可以取得程式正在執行的追蹤檔案。請參閱第 7.9.1.2 節,「建立追蹤檔案」

本節摘要說明您可以在已建置偵錯支援的 MySQL 程式的命令列上,於偵錯選項中指定的引數值。

可以藉由使用 --debug[=debug_options]-# [debug_options] 選項叫用程式,來使用 DBUG 套件。如果您指定沒有 debug_options 值的 --debug-# 選項,則大多數 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 |
+---------+
|         |
+---------+