文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 程式會使用預設值。伺服器預設值在 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:設定除錯輸出檔案。

大多數用戶端程式會使用 d:t:o,/tmp/program_name.trace 的預設 debug_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]

下表說明允許的旗標字元。無法辨識的旗標字元會被無聲無息地忽略。

旗標

說明

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 |
+---------+
|         |
+---------+