Xdebug によるトレース機能拡張

Xdebug を利用するとトレース機能を拡張することができます。

Xdebug による自動トレース機能

自動トレースとは、プログラム実行時に呼び出された関数等の情報を全てトレースファイルに出力することです。

Xdebug による「自動」トレース機能を有効にするには、以下のように xdebug.auto_trace スイッチをオンにして、 トレースファイルの出力ディレクトリを指定します。

xdebug.auto_trace = 1
xdebug.trace_output_dir = C:/Temp

このように設定して PHP を実行すると、xdebug.trace_output_dir で指定したディレクトリ内に、 自動的にトレースファイルが作成され、その中に下記のようなトレースログが記録されます。

TRACE START [2009-09-15 8:38:16]
    0.0050      68952   -> {main}() C:\keicode\cgi\test.php:0
    0.0112     240056     -> include(C:\keicode\inc1.php) C:\keicode\cgi\test.php:3
    0.0193     418392       -> include(C:\keicode\inc2.php) C:\keicode\site_common.php:3
    0.0195     409624     -> header_h() C:\keicode\cgi\test.php:6
    0.0196     410440       -> foo() C:\keicode\inc1.php:387
    0.0200     410472     -> contents() C:\keicode\cgi\test.php:7
    0.0201     410568       -> bar() C:\keicode\cgi\test.php:114
    0.0202     411064     -> footer() C:\keicode\cgi\test.php:8
    0.0220      73104
TRACE END   [2009-09-15 8:38:16]

明示的なトレース

自動的に全てのトレースを記録するのではなく、一部のみのトレースを行いたい場合は次のようにします。

xdebug_start_trace 関数でログファイル名を指定し、トレースを開始します。xdebug_stop_trace 関数でトレースを停止します。

例として次のコードのトレースを取得しましょう。

<?php
xdebug_start_trace( 'C:/Temp/log' );

$i = 10;
$j = 5;

echo foo($i, $j);

xdebug_stop_trace();

function foo($m, $n) {
     return $m + $n;
}
?>

これを実行すると C:\Temp\log.xt というログファイルが作成され、次の内容が記録されました。

TRACE START [2009-09-15 8:49:32]
    0.0025      59672     -> foo() C:\Temp\tracetest.php:11
    0.0035      59792     -> xdebug_stop_trace() C:\Temp\tracetest.php:14
    0.0036      59792
TRACE END   [2009-09-15 8:49:32]

戻り値のトレースも行う場合は、xdebug.collect_return スイッチを On にします。

xdebug.collect_return = 1

確かに以下のように戻り値が記録されています。

TRACE START [2009-09-15 8:05:44]
    0.0019      59672     -> foo() C:\Temp\tracetest.php:11
                           >=> 15
    0.0026      59792     -> xdebug_stop_trace() C:\Temp\tracetest.php:14
    0.0027      59792
TRACE END   [2009-09-15 8:05:44]

トレースファイル名

トレースファイル名は xdebug.trace_output_name で指定できます。

また、動的に付加する名前は以下の値が利用できます。

%c現在の作業ディレクトリの CRC チェックサム
%pプロセス ID
%rランダムな数字
%uタイムスタンプ
%H$_SERVER['HTTP_HOST'] の値
%R$_SERVER['REQUEST_URI'] の値

例えば次のように指定して PHP を実行してみます。

xdebug.trace_output_name = "mytrace-%u"

すると、mytrace-1153038453_128051.xt という名前のファイルが作成されました。

実行時に現在のログファイル名を取得するには、xdebug_get_tracefile_name() 関数が利用できます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説