Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

5.9.4 DBUG パッケージ

MySQL サーバーおよびほとんどの MySQL クライアントは、もともと Fred Fish によって作成された DBUG パッケージとともにコンパイルされます。 MySQL をデバッグ用に構成した場合は、このパッケージによって、プログラムが実行している内容のトレースファイルを取得できるようになります。 セクション5.9.1.2「トレースファイルの作成」を参照してください。

このセクションでは、デバッグサポート付きでビルドされた MySQL プログラムのコマンド行のデバッグオプションに指定できる引数値をまとめています。

DBUG パッケージは、--debug[=debug_options] または -# [debug_options] オプションを指定してプログラムを起動することによって使用できます。 --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: デバッグ出力ファイルを設定します

ほとんどのクライアントプログラムでは、プラットフォームにかかわらず、デフォルトの debug_options 値である d:t:o,/tmp/program_name.trace が使用されます。

シェルのコマンド行で指定されることがある、デバッグ制御文字列のいくつかの例を次に示します。

--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 値を変更するには、制限付きセッションシステム変数を設定するのに十分な権限が必要です。 セクション5.1.9.1「システム変数権限」を参照してください。

debug_options 値は、コロンで区切られた一連のフィールドです。

field_1:field_2:...:field_N

値内の各フィールドは、必須フラグ文字で構成され、オプションで + または - 文字が前に付き、オプションで修飾子のカンマ区切りリストが続きます:

[+|-]flag[,modifier,modifier,...,modifier]

次の表は、許可されるフラグ文字を示しています。 認識されないフラグ文字は暗黙のうちに無視されます。

フラグ

説明

d

DBUG_XXX マクロからの現在の状態に関する出力を有効にします。 キーワードのリストがあとに続くことがあり、そのキーワードを使用する DBUG マクロの出力のみが有効になります。 キーワードのリストが空の場合は、すべてのマクロの出力が有効になります。

MySQL では、一般的に有効にされるデバッグマクロのキーワードは、enterexiterrorwarninginfo、および loop です。

D

各デバッガの出力行のあとに待機します。 引数は 0.1 秒単位の待機時間であり、マシンの能力の影響を受けます。 たとえば、D,20 は 2 秒の待機を指定します。

f

デバッグ、トレース、およびプロファイリングの対象を指定された関数のリストに制限します。 空のリストの場合はすべての関数が有効になります。 適切な d フラグまたは t フラグを指定する必要があり、それらのフラグが有効な場合にのみ、このフラグはそれらのフラグのアクションを制限します。

F

デバッグ出力またはトレース出力の各行にソースファイル名を示します。

i

デバッグ出力またはトレース出力の各行に PID またはスレッド ID でプロセスを示します。

L

デバッグ出力またはトレース出力の各行にソースファイルの行番号を示します。

n

デバッグ出力またはトレース出力の各行に現在の関数のネストの深さを出力します。

N

デバッグ出力の各行に番号を付けます。

o

デバッガの出力ストリームを指定されたファイルにリダイレクトします。 デフォルトの出力先は stderr です。

O

o と似ていますが、ファイルは書き込みごとに実際にはフラッシュされます。 必要な場合、ファイルが書き込みごとに閉じられてふたたび開きます。

p

デバッガアクションを指定されたプロセスに限定します。 デバッガアクションが実行されるためには、プロセスが DBUG_PROCESS マクロで識別され、リスト内のプロセスと一致する必要があります。

P

デバッグ出力またはトレース出力の各行に現在のプロセス名を出力します。

r

新しい状態をプッシュするときに、前の状態の関数のネストレベルを継承しません。 出力を左マージンから開始する場合に便利です。

S

_sanity() から 0 以外が返されるまで、デバッグされる各関数で関数 _sanity(_file_,_line_) を実行します。

t

関数の呼び出し/終了のトレース行を有効にします。 最大のトレースレベルを示す数値を指定するリスト (修飾子が 1 つだけ含まれています) があとに続く場合があり、それを超えるとデバッグマクロまたはトレースマクロの出力は行われません。 デフォルトはコンパイル時のオプションです。

フラグの前の + 文字や - 文字、およびフラグの後ろに続く修飾子のリストは、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 |
+---------+
|         |
+---------+