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
:在輸出列中新增 PIDo,/tmp/mysqld.trace
、O,\mysqld.trace
:設定除錯輸出檔案。
大多數用戶端程式會使用 d:t:o,/tmp/
的預設 program_name
.tracedebug_options
值,不論平台為何。
以下是一些範例除錯控制字串,如它們在 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]
下表說明允許的旗標字元。無法辨識的旗標字元會被無聲無息地忽略。
旗標 |
說明 |
---|---|
|
啟用目前狀態的 在 MySQL 中,要啟用的常見除錯巨集關鍵字有 |
|
在每個除錯器輸出列後延遲。引數是以十分之一秒為單位的延遲,受機器功能限制。例如, |
|
將除錯、追蹤和效能分析限制為指定的函式清單。空的清單會啟用所有函式。仍必須提供適當的 |
|
識別每行除錯或追蹤輸出的來源檔案名稱。 |
|
使用每行除錯或追蹤輸出的 PID 或執行緒 ID 來識別程序。 |
|
識別每行除錯或追蹤輸出的來源檔案行號。 |
|
列印每行除錯或追蹤輸出的目前函式巢狀深度。 |
|
為每行除錯輸出編號。 |
|
將除錯器輸出資料流重新導向到指定的檔案。預設輸出是 |
|
類似於 |
|
如同 |
|
如同 |
|
將除錯器動作限制於指定的程序。程序必須以 |
|
針對除錯或追蹤輸出的每一行,印出目前的程序名稱。 |
|
當推入新的狀態時,不要繼承前一個狀態的函式巢狀層級。當輸出要從左邊界開始時很有用。 |
|
啟用函式呼叫/退出追蹤行。後面可接一個清單(僅包含一個修飾符),給定一個數字最大追蹤層級,超過該層級,除錯或追蹤巨集都不會產生輸出。預設值是一個編譯時選項。 |
|
針對每一行輸出,印出目前的時間戳記。 |
開頭的 +
或 -
字元和尾隨的修飾符清單,用於像 d
或 f
這樣的旗標字元,它們可以為所有適用的修飾符或僅為其中一些啟用除錯操作。
沒有開頭的
+
或-
,旗標值會設定為與給定的修飾符清單完全相同。帶有開頭的
+
或-
,清單中的修飾符會被加到或減去目前的修飾符清單。
以下範例顯示這對於 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 |
+---------+
| |
+---------+