多くの PHP プログラマーはデバッグに echo、print_r()、var_dump()、printf() などを使用しますが、豊富な開発経験を持つプログラマーにとってはこれらで十分ですが、多くの場合、 で出力することでプログラムの実行中にデバッグを実行できます。特定の変数の値を調べると、プログラムが正しく実行されているかどうかを判断でき、効率性も確認できます (もちろん、いくつかの時間関数を使用する必要がある場合もあります)。では、なぜプログラムの動作を監視するために特別なデバッガが必要なのでしょうか?
通常の PHP 開発では、大規模なプロジェクトを長期間蓄積すると、パフォーマンスがどんどん遅くなり、どこでパフォーマンスが消費されるかが頭痛の種になることがよくあります。プログラムの実行速度を低下させているバグをどのように見つければよいでしょうか?ここでは、多くの人が聞いたことがあると思う xdebug というツールを紹介したいと思います。このツールを使用すると、PHP プログラムのパフォーマンスのボトルネックを簡単に分析できます。
XDebug とは
XDebug は、PHP プログラムの実行ステータスを追跡、デバッグ、分析するために使用できるオープンソースの PHP プログラム デバッガー (つまり、デバッグ ツール) です。
XDebug をインストールします
[xdebug] zend_extension = "/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so" xdebug.auto_trace = on xdebug.auto_profile = on xdebug.collect_params = on xdebug.collect_return = on xdebug.profiler_enable = on xdebug.trace_output_dir = "/home/ad/xdebug_log" xdebug.profiler_output_dir = "/home/ad/xdebug_log"
XDebug パラメーターの概要:
www.xdebug.org にアクセスし、php_xdebug.dll をダウンロードし、オペレーティング システムと PHP バージョンに応じて適切なバージョン番号をダウンロードします。
ダウンロードした php_xdebug.dll を PHP インストール ディレクトリ phpext に配置します。
php.ini を編集します。一部の収集環境には xdebug 構成が付属しています。そうでない場合は、次の行を手動で追加します。
zend_extension は xdebug 拡張機能をロードしますxdebug.auto_trace は関数呼び出しの監視を自動的にオンにします
xdebug.auto_profile はパフォーマンス監視を自動的にオンにします
xdebug.trace_output_dir は、関数呼び出し監視情報の出力ファイルへのパスを設定します。
xdebug.profiler_output_dir は、性能監視情報出力ファイルへのパスを設定します。
xdebug.collect_params は「関数パラメータ」を収集する機能をオンにします。関数呼び出しのパラメータ値を関数プロシージャ呼び出しの監視情報に含めます。
xdebug.collect_return は「関数の戻り値」を収集する機能をオンにします。関数の戻り値を関数手続き呼び出しの監視情報に含めます。
Apache を再起動します。
の内容で test.php を書き込みます。出力内容に xdebug が表示されれば、インストールと構成は成功しています。または、/home/ad/xdebug_log に移動して、ログが出ているかどうかを確認します。
オプションの設定
カテゴリ設定説明
ログ
xdebug.trace_output_dir
ログ トレース出力ディレクトリ xdebug.trace_output_name ログ ファイル名。xdebug は、対応する形式でファイル名を生成するための一連の識別子を提供します。詳細については、公式 Web サイトの xdebug.trace_options を参照してください。 = 追加 (ファイルが存在する場合) 0 (デフォルト) = 表示データを上書きする (ファイルが存在する場合) xdebug.collect_params ゼロ以外の値 = 関数
のパラメーター表示オプションを制御します。
0 = 表示しません。1 = パラメーターの型、値 (例: array(9))。
2 = 1 と同じですが、CLI モードでは若干異なります
3 = すべての変数の内容
4 = すべての変数の内容と変数名 (例: array(0 => 9))。
xdebug.collect_return1 = 関数の戻り値を表示します。デフォルト 0 は表示しません。 xdebug.collect_vars1 = 現在のスコープで使用されている変数を表示し、必要に応じて変数名を表示します。 use xdebug.collect_params xdebug .collect_assignments1 = 変数の割り当てを表示する行を追加します (1 の場合、$a = 1 の形式になります。このタイプの割り当て式はトレース ファイルに表示されます) format xdebug.trace_format
0 = 人間が判読可能。各列は左から右に次を表します: 時点、メモリ、メモリ差分 (xdebug.show_mem_delta=1 を設定する必要があります)、レベル、関数名、関数パラメータ (xdebug.collect_params= を設定する必要があります) 1 (ゼロ以外の場合)、現在のコード行のファイル名、および行番号。
1 = マシン読み取り可能[1]。xdebug トレース ファイル パーサーや xdebug トレース ビューアーなどのサードパーティ アプリを使用する必要があります
2 = html形式、つまりテーブル、ブラウザで開く、テーブルを表示
xdebug.show_mem_delta1 = 各関数呼び出しのメモリ消費 (メモリ差) の動作を表示します。 xdebug.auto_trace1 = 自動トレースをオンにします (2 つのトレース方法があり、1 つは自動トレースです。すべての PHP スクリプトが実行されると、ファイルがトレースされます。 ;もう 1 つは、次のようなトリガー追跡です) xdebug.trace_enable_trigger[2]
1 = XDEBUG_TRACE GET/POST を使用してトレースをトリガーするか、Cookie XDEBUG_TRACE を設定します。リクエストごとに対応するトレース ファイルが生成されないようにするには、auto_trace を 0 に設定する必要があります。
注: この機能はバージョン 2.2 以降でのみ設定できます
[xdebug-general] Re:trace_enable_trigger は機能しませんか?
一些自定义函数
FunctionDescriptionvoid xdebug_enable()手动打开,相当于xdebug.default_enable=onvoid var_dump()覆写php提供的var_dump,出错时,显示函数堆栈信息,(前提:php.ini里html_errors为1),使用xdebug.overload_var_dump 设置是否覆写void xdebug_start_trace(
string trace_file_path
[, integer options] )手动控制需要追踪的代码段
trace_file_path :文件路径(相对或绝对,若为空).如果为空,或者不传参, 使用xdebug.trace_output_dir设置的目录
options :
XDEBUG_TRACE_APPEND: 1 = 追加文件内容末尾, 0 = 覆写该文件
XDEBUG_TRACE_COMPUTERIZED:
2 =同 xdebug.trace_format=1 .
XDEBUG_TRACE_HTML: 4 = 输出HTML表格,浏览器打开为一table
void xdebug_stop_trace()停止追踪,代码追踪在该行停止string xdebug_get_tracefile_name()获得输出文件名,与 xdebug.auto_trace配合使用.void xdebug_var_dump([mixed var[,...]]) 输出变量详细信息,相当于php里的var_dump,具体显示请看 这里 xdebug.show_local_vars 默认为0,不显示;非零时,在php执行出错时,显示出错代码所在作用域所有本地变量(注:这会产生大量信息,因此默认是closed),具体显示差别如下图[3]array xdebug_get_declared_vars()显示当前作用域中已声明的变量array xdebug_get_code_coverage()显示某一段代码内,代码执行到哪些行[4]
关于xdebug.trace_format=1,如果你使用触发方式启用代码追踪:(xdebug.auto_trace = 0;xdebug.trace_enable_trigger = 1),那么,你可以在URL里添加XDEBUG_TRACE,例如:localhost/test.php?XDEBUG_TRACE,或者localhost//test.php?XDEBUG_TRACE=1(任意值)。
是不是觉得很麻烦,那么装个插件,让它来帮你。Chrome XDEBUG Helper,使用它,你可以切换3种状态,disabled ,debugging enabled,profiling enabled(下篇详细介绍),然后切换到debugging enabled。运行该脚本,(去掉URL里的?XDEBUG_TRACE),就可以代码跟踪了。
使用xdebug_start_trace()和xdebug_stop_trace()可以手动追踪你的代码执行情况。
xdebug_start_trace(); //your code required to trace xdebug_stop_trace();
设定 xdebug.auto_trace = 1 将在执行所有 PHP 脚本之前先启用自动跟踪。另外,您可以通过代码设定 xdebug.auto_trace = 0,并分别使用 xdebug_start_trace() 和 xdebug_stop_trace() 函数启用和禁用跟踪。但是,如果 xdebug.auto_trace 为 1,则可以在包括配置好的 auto_prepend_file 之前先启动跟踪。
选项 xdebug.trace_ouput_dir 和 xdebug.trace_output_name 用于控制保存跟踪输出的位置。在这里,所有文件都被保存到 /tmp/traces 中,并且每个跟踪文件都以 trace 为开头,后接 PHP 脚本的名称(%s)以及进程 ID(%p)。所有 Xdebug 跟踪文件都以 .xt 后缀结尾。
默认情况下,XDebug 将显示时间、内存使用量、函数名和函数调用深度字段。如果将 xdebug.trace_format 设为 0,则输出将符合人类阅读习惯(将参数设为 1 则为机器可读格式)。此外,如果指定 xdebug.show_mem_delta = 1,则可以查看内存使用量是在增加还是在减少,而如果指定 xdebug.collect_params = 4,则可以查看传入参数的类型和值。要监视每个函数返回的值,请设定 xdebug.collect_return = 1。