Xdebug を使用すると、パラメーターや戻り値を含むすべての関数呼び出しをさまざまな形式のファイルに記録できます。
これらのいわゆる「関数トレース」機能は、新しいアプリケーションに直面したり、プログラムが実行中に何をしているかを把握したい場合に役立ちます。関数トレースでは、関数またはメソッドによって渡された変数の値と戻り値をオプションで表示できます。これら 2 つの要素の追跡は、デフォルトでは有効になっていません。
3つの出力形式があります。 1 つは人間が判読できる追跡情報を持ち、もう 1 つはコンピュータ プログラムによる解析に適しており、最後は HTML を使用して追跡情報をフォーマットします。 xdebug_trace_format 設定を使用すると、これら 2 つの不適切な形式を切り替えることができます。トレース ファイルに書き込む情報を制御する設定もあります。たとえば、変数 (xdebug.collect_params) と戻り値 (xdebug.collect_return) を設定します。次の例は、人間が判読できる関数トレース情報のさまざまな設定の影響を示しています。
スクリプト
デフォルト値:
トレース開始 [2007-05-06 14:37:06]
0.0003 114112 -> {main}() ../trace.php:0
0.0004 114272 -> str_split() ../trace.php:8
0.0153 117424 -> ret_ord() ../trace.php:10
0.0165 117584 -> ord() ../trace.php:5
0.0166 117584 -> ret_ord() ../trace.php:10
0.0167 117584 -> ord() ../trace.php:5
0.0168 117584 -> ret_ord() ../trace.php:10
0.0168 117584 -> ord() ../trace.php:5
0.0170 117584 -> ret_ord() ../trace.php:10
0.0170 117584 -> ord() ../trace.php:5
0.0172 117584 -> ret_ord() ../trace.php:10
0.0172 117584 -> ord() ../trace.php:5
0.0173 117584 -> ret_ord() ../trace.php:10
0.0174 117584 -> ord() ../trace.php:5
0.0177 41152
トレース終了 [2007-05-06 14:37:07]
Collect_params=1:
リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
Collect_params=3:リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
Collect_params=4:リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
xdebug.collet_params 設定に加えて、トレース ファイルの出力に影響を与える他の設定があります。 「show_mem_delta=1」は、2 つの異なる列でメモリ使用量を表示できます。リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
「collect_return=1」は、呼び出された関数の戻り値を表示します。リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
「collect_assignments=1」は変数の割り当てを表示します。詳細については、xdebug.collect_assignments 設定を参照してください。
「xdebug.trace_format」設定は出力形式を変更して、解析しやすくしますが、理解しにくくします。これは、サードパーティ ツールを使用してトレース ファイルを解析する場合に最も役立ちます。
リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー リーリー
VIM 構文ファイル
リーリー リーリー リーリー
これを実行すると、開いた追跡ファイルは次のようになります:
<strong>TRACE START</strong> <strong>[2007-05-15 20:06:02]</strong>
0.0003 115208 <strong>-></strong> <strong>{main}()</strong> ../trace.php<strong>:0</strong>
0.0004 115368 <strong>-></strong> <strong>str_split() </strong>../trace.php<strong>:8</strong>
0.0006 118520 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0007 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0008 118680 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0009 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0010 118680 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0010 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0012 118680 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0012 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0014 118680 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0014 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0016 118680 <strong>-></strong> <strong>ret_ord() </strong>../trace.php<strong>:10</strong>
0.0016 118680 <strong>-></strong> <strong>ord() </strong>../trace.php<strong>:5</strong>
0.0019 54880
<strong>TRACE END</strong> <strong>[2007-05-15 20:06:02]<br></strong>
相关设置:
xdebug.auto_trace
类型: boolean, 默认值: 0
打开此设置时,脚本在运行前函数调用追踪将开启。这将可能追踪auto_prepend_file设置的代码文件。
xdebug.collect_assignments
类型: boolean, 默认值: 0, 始于 Xdebug > 2.1
用于控制xdebug是否添加变量赋予到函数追踪当中。
xdebug.collect_includes
类型: boolean, 默认值: 1
用于控制xdebug是否将include(), include_once(), require() 或 require_once() 引用的文件名写入到跟踪文件中。
xdebug.collect_params
类型: integer, 默认值: 0
默认为0时,该设置控制xdebug不管是函数追踪还是堆栈跟踪都会收集调用函数的参数。
默认0值是考虑到大规模脚本会占用大量内存,所以不会为了大脚本来运行它。你可以安全地打开此设置,但你会预料到会一些脚本上的问题像大量函数调用兼庞大的数据结构作为参数传递。Xdebug2不会有增加内存使用的问题,因为它不会存储到内存,而是只存入磁盘中。这只需要你有足够的磁盘使用量即可。
该设置有4种设置值。每种都会呈现不同的信息。以下表格展示各种设置值信息:
Value |
Argument Information Shown |
0 |
无. |
1 |
展示变量元素的值类型和值。 |
2 |
展示变量元素的值类型和值,并附带滑鼠提示显示完整信息。(CLI模式下不存在滑鼠提示) |
3 |
完整变量内容(内容受限于以下设置: xdebug.var_display_max_children,xdebug.var_display_max_data and xdebug.var_display_max_depth.) |
4 |
完整变量内容和名称。 |
5 |
PHP 序列化变量内容,不含名称。(2.3版本新特性) |
xdebug.collect_return
タイプ: ブール、デフォルト値: 0
関数呼び出しの戻り値をトレース ファイルに書き込むかどうかを制御します。
コンピューター化されたトレース ファイル (xdebug.trace_format=1) を実現するには、Xdebug 2.3 以降を使用する必要があります。
xdebug.show_mem_delta
タイプ: 整数、デフォルト値: 0
この設定が 0 以外の場合、手動で読み取ることができるトレース ファイルには、各関数呼び出しによって占有されるメモリ量の違いが表示されます。 xdebug がコンピューターで読み取り可能なトレース ファイルを生成するように設定されている場合、常に次のような情報が表示されます。
xdebug.trace_enable_trigger
タイプ: boolean、デフォルト値: 0、Xdebug > 2.2
以降1 に設定すると、XDEBUG_TRACE GET/POST パラメーターを使用するか、XDEBUG_TRACE という名前の Cookie 値を設定して、追跡ファイルの生成をトリガーできます。追跡データ ファイルは、事前定義されたフォルダーに書き込まれます。 xdebug がリクエストごとにトレース ファイルを生成しないようにするには、xdebug.auto_trace を 0 に設定する必要があります。トリガー自体には、xdebug.trace_enable_trigger_value を設定することでアクセスできます。
xdebug.trace_enable_trigger_value
タイプ: string、デフォルト値: ""、Xdebug > 2.3
以降この設定は、xdebug.trace_enable_trigger で説明されている XDEBUG_TRACE 関数を利用できる人を制限するために使用されます。デフォルトの null 値から変更する場合、Cookie、GET、または POST の値が、トレース ファイル用に生成された設定の共有非表示設定と一致する必要があります。
xdebug.trace_format
タイプ: 整数、デフォルト値: 0
トラックファイル形式。
価値 |
説明 |
0 |
人間が判読できる形式のファイルを表示します: 時点、メモリ量、メモリ デルタ (xdebug.show_mem_delta がオンの場合)、レベル、関数名、関数パラメータ (xdebug.collect_params がオンの場合)、ファイル名、行番号。 |
1 |
2 つの異なるレコードを使用して、コンピューター可読形式のファイルを作成します。レコードの違いは、一方はスタック境界を挿入し、もう一方はスタック境界を削除することです。次の表に、レコード内の各フィールドの違いを示します。 |
2 |
HTML を使用して追跡ファイルを作成します。 |
コンピュータ化された形式のフィールド:
レコードタイプ |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 - ... |
エントリー |
レベル |
関数# |
常に「0」 |
タイムインデックス |
メモリ使用量 |
関数名 |
ユーザー定義 (1) または内部関数 (0) |
インクルード/必須ファイルの名前 |
ファイル名 |
行番号 |
パラメータの数 |
パラメータ (フィールド 11 で指定した数) - タブ区切り |
出口 |
レベル |
関数# |
常に「1」 |
タイムインデックス |
メモリ使用量 |
空 |
||||||
戻る |
レベル |
関数# |
常に「R」 |
空 |
戻り値 |
空 |
xdebug.trace_options
タイプ: 整数、デフォルト値: 0
1 に設定すると、追跡ファイルは後続のリクエストでコンテンツを直接上書きするのではなく、後でコンテンツを追加します。
xdebug.trace_output_dir
タイプ: string、デフォルト値: /tmp
ファイル書き込みパスをトレースし、PHP の実行時にユーザーがディレクトリへの書き込み権限を持っていることを確認します。
xdebug.trace_output_name
タイプ: string、デフォルト値: trace.%c
この設定は、追跡情報が書き込まれるファイル名を決定します。この設定では、sprintf() や strftime() と同様の形式識別子を使用します。 ファイル名のフォーマットには、いくつかのフォーマット識別子を使用できます。接尾辞「.xt」がファイル名に自動的に追加されます。
フォーマットされた識別子のリスト:
識別子 |
意味 |
フォーマット例 |
ファイルの例 |
%c |
現在の作業パスのCrc32検証値 |
トレース.%c |
trace.1258863198.xt |
%p |
プロセス識別子 |
トレース.%p |
trace.5174.xt |
%r |
乱数 |
トレース.%r |
trace.072db0.xt |
%s |
スクリプト名2 |
cachegrind.out.%s |
cachegrind.out._home_httpd_html_test_xdebug_test_php |
%t |
制限時間(秒) |
トレース.%t |
trace.1179434742.xt |
%u |
タイムカットオフ (マイクロ秒) |
トレース.%u |
trace.1179434749_642382.xt |
%H |
$_SERVER['HTTP_HOST'] |
トレース.%H |
trace.kossu.xt |
%R |
$_SERVER['REQUEST_URI'] |
トレース.%R |
trace._test_xdebug_test_php_var=1_var2=2.xt |
%U |
$_SERVER['UNIQUE_ID'] 3 |
トレース.%U |
trace.TRX4n38AAAEAAB9gBFkAAAAB.xt |
%S |
session_id (ソース $_COOKIE、設定されている場合) |
トレース.%S |
trace.c70c1ec2375af58f74b390bbdd2a679d.xt |
%% |
リテラル % |
トレース.%% |
トレース.%%.xt |
2 これはファイル名の追跡には使用できません。
3 バージョン 2.2 の新機能。この機能は、Apache mod_unique_id モジュールによって設定されます。
xdebug.var_display_max_children
タイプ: 整数、デフォルト値: 128
この設定は、xdebug_var_dump()、xdebug.show_local_vars、またはトレース関数を使用するときの配列要素の数とオブジェクト プロパティの表示を制御します。
制限されていない場合は、-1の値に設定できます。
この設定は Remot_Debuggin の影響を受けません。
xdebug.var_display_max_data
タイプ: 整数、デフォルト値: 512
この設定は、xdebug_var_dump()、xdebug.show_local_vars、またはトレース関数を使用するときに表示される文字列の最大長を制御します。
制限されていない場合は、-1の値に設定できます。
この設定は Remot_Debugging の影響を受けません。
xdebug.var_display_max_ Depth
タイプ: 整数、デフォルト値: 3
この設定は、xdebug_var_dump()、xdebug.show_local_vars、またはトレース関数を使用するときの配列要素とオブジェクト プロパティの表示レベルを制御します。
最大値は 1023 です。-1 に設定して最大値を示すことができます。
この設定は Remot_Debugging の影響を受けません。
関連機能:
文字列 xdebug_get_tracefile_name()
現在のトレース出力のスクリプト ファイル名を返します。この機能は、xdebug.auto_trace がオンの場合に使用できます。
void xdebug_start_trace( string trace_file [, 整数オプション] )
新しい機能の追跡を開始します
特定の時点で、パラメータ trace_file で指定されたファイルにマージされた関数 トレースが開始されます。ファイル名が指定されていない場合、トレース ファイルは xdebug.trace_output_dir 設定で指定されたディレクトリに保存されます。最初の引数でファイル名を指定すると、その名前は現在の作業ディレクトリを基準にしたものになります。ただし、現在の作業ディレクトリは予期したものと異なる場合があるため、ファイル名を指定するときは絶対ディレクトリを指定することをお勧めします。 PHP 関数 getcwd() は、現在の作業ディレクトリを指すことができます。
トレースファイル名は通常「{trace_file}.xt」です。 xdebug.auto_trace がオンになっている場合、ファイル名「{filename}.xt」の「{filename}」部分は、xdebug.trace_output_name の設定によって決定されます。パラメーター オプションはビット値であり、次の 3 つのオプションがあります:
XDEBUG_TRACE_APPEND (1)
トレースファイルを上書きモードではなく追加モードで開くようにします。
XDEBUG_TRACE_COMPUTERIZED (2)
「xdebug.trace_format」で記述される形式のトレースファイルを作成します。
XDEBUG_TRACE_HTML (4)
追跡ファイルをHTML形式で作成します。
XDEBUG_TRACE_NAKED_FILENAME (8)
一般的に、Xdebug は、指定した最初のパラメータのファイル名の末尾に「.xt」を追加します。 XDEBUG_TRACE_NAKED_FILENAME オプションを使用すると、「.xt」は追加されません (Xdebug 2.3 の新機能)。
Xdebug 1 とは異なり、Xdebug 2 は関数の呼び出し時にメモリを占有しません。ですが、ディスクに書き込まれ、メモリ使用量の圧迫が軽減されます。 xdebug.collect_includes、xdebug.collect_params、xdebug.collect_return などの設定はトレース ファイルに記録される情報の種類に影響し、xdebug.trace_format はファイル情報の形式に影響します。
void xdebug_stop_trace()
関数呼び出しのトレースを停止し、トレース ファイルを閉じます。