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.trace
、O,\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,也可以在執行階段透過設定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 |
+---------+
| |
+---------+