xdebug は php 拡張機能で、公式アドレスは https://xdebug.org/index.php で、開発者がコードをデバッグできるようにするために使用されます。この記事では主に、php デバッグ ツール Xdebug の最新バージョン 2.6 の詳細な使用方法について説明します。 Lielai について説明します。皆さんのお役に立てれば幸いです。
次の機能があります:
PHP エラー プロンプトを置き換えます:
プロンプトにカラー マッチングを追加して、さまざまな情報を強調します
大きな変数の印刷:
var_dump()、print_r() およびその他の印刷関数の機能を強化して印刷します大きな変数 クラッシュを回避するのに非常に役立ちます
最大再帰保護:
PHP がスタックするのを防ぐために再帰の最大数を設定できます
関数呼び出し追跡:
関数呼び出しプロセスを追跡し、渡された値と返された値を表示できます。メモリ使用量など
コードカバレッジ分析:
コードの実行中にどの行が実行されたかを知ることができます
ガベージコレクション分析:
PHP がガベージコレクションを実行するときにどの変数がクリーンアップされたか、どのくらいのメモリが解放されたかなどの情報を表示します
コードのパフォーマンス分析:
コードの各部分の実行時間を確認して、コード実行効率のボトルネックを見つけることができます。
リモート デバッグ:
リモート ブレークポイント デバッグ用の IDE ツールを使用して、コードの実行を追跡できます。動作中のさまざまな変数の値を段階的に表示または設定し、var_dump()、print_r() およびその他の関数の使用を避けます。これらの関数は、xdebug の最も一般的に使用される関数でもあり、非常に強力です。
インストール:
以下の環境は説明のために使用されています。他の環境については、プロンプトに従ってください:
オペレーティング システム: Windows 10
php バージョン: php-7.1.13-nts (32 ビット)
ダウンロード: https://xdebug .org/download.php
ご自身の環境に応じて適切なバージョンを選択してください (php バージョン、スレッドセーフかどうか、ビット幅など)。ここでは以前の環境に基づいて選択します:
バージョン: Xdebug 2.6。 0、PHP 7.1 VC14 (32 ビット) このバージョンは 2018-01-29 にリリースされました
ダウンロードしたファイル php_xdebug-2.6.0-7.1-vc14-nts.dll を php の ext ディレクトリに置きます
php.ini ファイルを変更し、次の設定を追加します:
zend_extension="php_xdebug- 2.6.0-7.1-vc14-nts.dll"
phpinfo() を実行します。xdebug 拡張機能が表示されていれば、インストールは成功しています。そうでない場合は、選択されているかどうかを確認してください。インストールが完了したら、実際に使用するための手順に従う必要があります。以下は、各機能に基づいた一般的な手順です。 Xdebug モード:
xdebug 拡張機能が有効になっている限り、この機能はデフォルトでオンになり、xdebug スタイルで表示されます。元の PHP スタイルで表示したい場合は、それを設定できます。設定ファイル: xdebug.default_enable=0。この設定項目は、xdebug のすべての機能をオフにすることを意味するものではないことに注意してください。変数は、有名なコンテンツ管理システムのノード レンダリング配列など、非常に大きくなります。 drupal8.print_r を直接実行すると、8G メモリを搭載した I5 コンピューターがスタックする可能性があるため、この状況を回避するために、Xdebug は次の構成項目を構成します:
xdebug.var_display_max_children
Integer (デフォルトは 128)。表示される配列の子要素またはオブジェクト属性の数。制限がない場合は、-1 に設定します。リモート デバッグ中には影響を受けません。
xdebug.var_display_max_data
表示文字列の最大長です。 -1 に制限され、リモート デバッグには影響しません
xdebug.var_display_max_ Depth
整数、デフォルトは 3、配列またはオブジェクトの属性を表示するときの最大ネストの深さ、最大値は 1023、この最大数を参照するには -1 を使用できます
最大再帰保護:
次の構成項目を設定します:
xdebug.max_nesting_level
整数、デフォルトは 256、制限なし -1、無制限の再帰保護メカニズム。再帰呼び出しがこの設定に達すると、プログラムは中断されないことに注意してください。このとき、エラーメッセージが表示されますが、プログラムは直接終了します。
関数呼び出し追跡:
オブジェクトメソッド呼び出しを含むこの機能は、オンにすると、ファイルに出力されます。ファイルを表示して次のように設定します (ここでの値は、レプリケーションと使用のために最も一般的に使用される状況に設定されています。詳細については、以下の設定手順を参照してください):
xdebug.auto_trace=1
; トレースをオンにします。デフォルトはオフです。
xdebug.trace_output_dir="C:rootxdebugtrace"
; トレースデータ出力ディレクトリの呼び出し
xdebug.trace_output_name="yunke.%s.%u"
; トレースファイルのファイル名
関数の戻り値の収集
xdebug.show_mem_delta= 1
; メモリの詳細を表示します
xdebug.trace_format=0
; トレース ファイルの形式
上記の設定により、すべてのリクエストの分析ファイルが生成され、トレース分析の呼び出しは変数によってトリガーすることもできます (ブラウザー拡張機能を使用して自動的に実行できます)。これも推奨される方法です (下記を参照)。つまり、GET/POST または Cookie で変数名 XDEBUG_TRACE を設定します。設定は次のとおりです: auto_trace=0
。 ;変数トリガー トレースが有効な場合、自動トレースをオフにする必要があります
xdebug.trace_enable_trigger=1
xdebug.trace_enable_trigger_value="yunke"
;これは、上記の XDEBUG_TRACE 変数の値です
たとえば、URL にアクセスしてください: http:/ /www.test.com/index.php? この関数を使用すると、コードの実行でどの行が実行されたかを知ることができます。構成は次のとおりです。カバレッジ分析がオンになります
コード カバレッジ分析は、PHP コード内の関数を呼び出すことによって実行されます。はい、プロセスは次のとおりで、配列の結果が得られます:
xdebug_start_code_coverage();//上書きをオンにする
…//Some解析中のコード
var_dump(xdebug_get_code_coverage());//解析結果の配列を取得
ガベージコレクション解析:
この機能はデフォルトでオフになっており、オンにするとガベージコレクション解析データがファイルに出力されます。ファイルを参照してください。構成は次のとおりです (ここでの値は、コピーおよび使用のために最も一般的に使用される状況に設定されています。詳細については、以下の構成を参照してください):
xdebug.gc_stats_enable=1
;分析
xdebug.gc_stats_output_dir="C:rootxdebuggc"
; データ出力ディレクトリ、デフォルトは /tmp
xdebug.gc_stats_output_name="gcstats.%s.%u"
; 出力ファイル名、デフォルトは: gcstats.%う
プログラムパフォーマンス分析:
この機能はデフォルトではオフになっています。オンにすると、ファイルは機械で解析しやすいテキスト形式で表示されます。設定は次のとおりです (ここでの値は、コピーして使用するために最も一般的に使用される状況に設定されています。詳細については、以下の設定手順を参照してください):
xdebug.profiler_enable=1
; パフォーマンス分析をオンにします
xdebug.profiler_output_dir="C: rootxdebugprofiler"
; パフォーマンス分析ファイルの出力ディレクトリ
xdebug.profiler_output_name="cachegrind .out.%s.%u"
; パフォーマンス分析出力ファイル名
上記の設定により、すべてのリクエストの分析ファイルが生成されます。 パフォーマンス分析は、変数によってトリガーされます (ブラウザ拡張機能を使用して自動的に実行できます。これも推奨される方法です (以下を参照)。つまり、変数名を設定します。オフにする必要があります
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable_trigger_value="yunke"
; これは、URL: http://www.test.com/index にアクセスするなど、分析ファイルの生成をトリガーするための上記の XDEBUG_PROFILE 変数の値です。プログラムはこの問題に対処できず、エラーを引き起こす可能性もあります。Yunke 氏のテストでは、QCacheGrind が最も効果的です。これは、KCacheGrind の Windows バージョンです。
の左側に「」があります。 「フラット プロファイル」パネルを開くと、最初の列「含む」は、内部的に呼び出されるサブルーチンの時間を含む実行時間です。自己列は、サブ関数の呼び出しを除いて、それ自体によって消費された時間です。呼び出された列は、関数の呼び出し回数です。関数は関数名、場所列はファイルの場所です。時間は 1 秒 = 1000000 マイクロ秒 (μs) で表されます。
まず、リモート デバッグのプロセス全体を見てみましょう。まず、デバッグ対象のスクリプトが特別なパラメータを使用してブラウザによって開かれ、スクリプトの実行が開始されます。この時点で、Xdebug は構成されたデバッグ クライアントへの接続をアクティブに開始し、DBGp を使用します。デバッグ クライアントと対話するためのプロトコル (デバッグ クライアントは多くの場合、phpstorm などの IDE で使用され、デバッグ ネットワーク ポートをリッスンする必要があります)。デバッグ クライアントは、このプロトコルを使用して、Xdebug にコードを段階的に実行させたり、表示したりすることができます。プログラム内の変数の内容を設定すると、Xdebug は各ステップ間で php プログラムを一時停止します。この「ステップ」は、デバッグ クライアントの場合、そこでプログラムを一時停止するブレークポイントを設定することもできます。ブレークポイント デバッグと呼ばれるプロセス全体は、PHP エンジンの Xdebug の 1 ステップであり、デバッグ クライアントから指示を受け取りながら段階的にコードを実行します。
リモート デバッグを実行するには、具体的な操作は次のとおりです。まず、次の設定を行って php を再起動する必要があります:
xdebug.remote_enable=1
;リモート デバッグ スイッチ
xdebug.remote_host=localhost
;リモート デバッグ クライアントのホスト アドレス。 IDE が配置されているホストのアドレスです。多くの場合、localhost
xdebug.remote_port=9000
; リモート デバッグ ポート
を設定した後、ブラウザでスクリプトを開き、開くときに GET/POST を送信する必要があります。変数名 XDEBUG_SESSION_START または Cookie 変数名 XDEBUG_SESSION。その値は Xdebug および debug です。 クライアントの通信セッション ID は、多くの場合、phpstorm で指定される「PHPSTORM」など、IDE によって指定される特殊文字です。この値は、xdebug.idekey で設定できます。デフォルトは空の文字列です。ブラウザの追加パラメータはブラウザを介して渡すことができます。拡張機能は自動的に完了します (以下を参照)。サーバーは、xdebug.remote_mode の設定に従ってデバッグ プロセスを開始します。設定項目が「req」の場合、Xdebug はスクリプトの最初の開始時にデバッグ クライアント (IDE) へのデバッグを開始します。これが「jit」の場合も接続はデフォルト値です。エラーが発生すると開始され、IDE との接続が正常に確立されると、DBGp プロトコルがデバッグ対話に使用されます。サーバーが複数の開発者によって共有されている場合、複数のデバッグ クライアントが存在し、xdebug.remote_host 構成項目は 1 つにのみ設定できます。これにより、http が使用されます。 header デバッグクライアントから取得した IP をデバッグクライアントのアドレスとして使用します。
デバッグ接続を開始するときの Xdebug のデフォルトのタイムアウトは、xdebug.remote_timeout 構成項目で設定されます。リモート ネットワーク ホストの場合は、この値を増やす必要があります。ネットワークの遅延。
ブラウザ プラグイン支援:
上で述べたように、分析のトリガー、ファイルの追跡、およびリモート デバッグの有効化にはすべて、GET/POST または Cookie で特定の変数と値を設定する必要があるため、ブラウザにそれを行わせることができますか?これは可能です。開発者が最もよく使用する Firefox ブラウザーのリストを次に示します。
まず補助プラグインをインストールし、アドレス https://addons.mozilla.org/en-GB/firefox/addon/xdebug-helper を開きます。 -for-firefox/
Firefox 用の Xdebug Helper が表示されます。[Firefox に追加] をクリックしてプロンプトに従います
インストールが完了したら、次の設定を行う必要があります。 キーの組み合わせ「ctrl+shift+a」を押してアドオン パネルを開き、Xdebug Helper を見つけて [オプション] をクリックし、IDE リモート セッション ID、分析キー、およびトラッキングを入力します。それぞれのキー (設定の xdebug.idekey、xdebug.profiler_enable_trigger_value、xdebug.trace_enable_trigger_value に対応) をクリックして、[保存] をクリックします。この時点で、新しく開いた Web ページのブラウザーのアドレス バーにクローラー アイコンが表示されます。4 つの状態を選択できます。 : デバッグ、分析、追跡、および無効。最初の 3 つの状態で参照します。サーバーが接続を開くと、追加の Cookie パラメーターが伴います。たとえば、分析を選択すると、XDEBUG_PROFILE 変数が追加されます。接続が更新されたときの Cookie の値は、以前に設定されたキーの値です。これにより、Xdebug が分析ファイル、関数トレース、およびリモート デバッグを生成できるようになります。
phpstorm デバッグ:
前述したように、Xdebug のリモート デバッグは、DBGp プロトコルを通じてデバッグ クライアントと対話するプロセスであり、リモート デバッグ クライアントは、Xdebug によって開始されたデバッグ接続を受信するためにネットワーク ポートをリッスンする必要があります。ここでは、特定の操作を説明するためにリモート デバッグ クライアントとして使用されます。
PhpStorm は、開発者にとって一般的に使用される IDE です。ここでは、有名なコンテンツ管理システム drupal8 を使用して、ホストの選択 (localhost、ポートの選択) をインストールして構成します。デフォルトの 9000、および前のセクションで説明した Firefox 拡張機能の Xdebug Helper がインストールされている場合は、PhpStorm によって作成された drupal プロジェクトを開きます (プロジェクトの作成方法がまだわかりません。Baidu または drupal 公式 Web サイトを参照してください)。ファイルを開きます。 > デフォルト設定 > 言語 > PHP > (オプション)、ここに drupal と入力し、サーバー設定パネルを開き、サーバー名、URL アドレス、およびポートを入力します。 、デバッガーとして Xdebug を選択し、パス マッピングをチェックしません。適用 OK をクリックして、前のパネルに戻ります。開始 URL に「/」を入力します。ブラウザーは、Firefox 拡張機能用 Xdebug Helper がインストールされた Firefox を選択します。アプリケーションは OK、
この時点で、phpstorm インターフェイスの右上隅にあるデバッグ ボタンの行にあるドロップダウン メニューで、新しく作成されたデバッグ「drupal」が自動的に選択され、電話のアイコンをクリックするか (アイコンの受信機がリッスン状態に変わります)、メニューの「実行 | PHP デバッグ接続のリッスンを開始」をクリックしてポート 9000 のリッスンを開始し、インデックス ファイルにブレークポイントを設定します (コード行番号の左側の空白をクリックすると、赤い点が表示されます)。これで準備は完了です。 、Firefoxブラウザを開き、アドレスバーのクローラーアイコンを「デバッグ」として選択し、drupalページを開きます。このとき、phpstromは左下隅にデバッグパネルを開き、コードを操作するための多くのボタンが表示されます。実行: 変数サブパネルには、現在のスコープ内のすべての変数がリストされ、すべての変数の内容を表示できます。ウォッチ パネルでは、変数または式の内容を追跡できます。フレーム パネルでは、現在の行が配置されているコール スタック フレームがリストされます。
デバッグに phpstorm を使用する方法については、公式ドキュメントを参照してください。詳細については説明しません。 phpstorm 公式 Web サイトで提供されているデバッグ ヘルプ ドキュメント ページをいくつか示します。
インストール構成:
https://confluence.jetbrains.com/ display/PhpStorm/Zero-configuration +Web+Application+Debugging+with+Xdebug+and+PhpStorm
デバッグ操作:
https://confluence.jetbrains.com/display/PhpStorm/Using+the+PhpStorm+Debugger
注ブレークポイントを設定しない場合、デバッグ セッションはコードの最初の行にとどまるように設定することもできます ([実行] > [最初の行でブレーク] を選択します)。 PHP スクリプト内)。
デバッグ中にブラウザで 500 エラーが発生し、デバッグ接続が切断された場合は、サーバーが php プログラムを終了した可能性があります。FastCGI モードで Apache を実行している場合、エラー ログは「スクリプトの終了」のようなものになります。ヘッダーの前に出力される場合は、サーバー設定ファイル httpd.conf の FcgidIOTimeout パラメータと IPCCommTimeout パラメータを秒単位で希望する待ち時間に設定してください。その他の環境では、タイムアウト設定をご自身で確認してください。
共通の設定:
すべての設定と詳細については、https://xdebug.org/docs/all_settings を参照してください。この記事では、
xdebug.trace_output_dir
関数がトレース データ ファイルを呼び出すディレクトリについて簡単に紹介するだけです。デフォルトは /tmp です。書き込み可能であることを確認してください
xdebug.trace_output_name
トレース ファイルのファイル名ガイド、デフォルトは次のとおりです:trace.%c 例: yunke.%s.%u は、パスとスクリプト名を出力します。次のような微妙な時間: yunke.C__root_test_index_php. 1520473784_260486.xt
xdebug.auto_trace
関数呼び出しトレースを有効にする、ブール値、デフォルトは 0
xdebug.collect_assignments
ブール値、関数に変数割り当てを追加するかどうかtracing
xdebug.collect_includes
ブール値、デフォルトは 1 、 include()、include_once()、require() または require_once() ファイルをトラッキング ファイル
xdebug.collect_params
に書き込むかどうか整数、デフォルトは 0、関数追跡用のパラメータのコレクションを決定します、0 はコレクションなしを意味します、1 パラメータのタイプと数、2 は 1 に基づいてツールヒント情報を追加します、3 完全な変数内容 (変数出力設定の影響を受けます)、4 完全変数 コンテンツと変数名、5php シリアル化されたコンテンツには変数名がありません
xdebug.collect_return
ブール値、デフォルト 0、関数呼び出しの戻り値をトレース ファイルに書き込むかどうか
xdebug.show_mem_delta
整数、デフォルトは 0、非-0の値が表示されます 関数呼び出しのメモリ使用量情報
xdebug.trace_format
整数、デフォルトは0、トレースファイルの形式、0は人間が判読できる形式(時間インデックス、メモリ使用量など)、1は機械可読形式 2 は、Web ページに表示される人間可読形式です
xdebug.trace_options
Integer、デフォルトは 0、1 に設定すると、トレース ファイルは上書きされずに追加されます
xdebug.var_display_max_children
Integer、デフォルト128、表示される配列のサブ要素またはオブジェクト属性の最大数、制限なし -1 に設定すると、リモート デバッグは影響を受けません
xdebug.var_display_max_data
整数、デフォルト 512、表示文字列の最大長、制限なし - 1、リモート デバッグには影響しません
xdebug.var_display_max_ Depth
integer、デフォルト 3、配列またはオブジェクトの属性を表示するときの最大ネストの深さ、最大値は 1023、この最大数を参照するには -1 を使用できます
xdebug.coverage_enable
Boolean 、デフォルトは 1、コードカバレッジ分析を有効にするかどうか、Yunke が実際にこの設定項目が無効であることを測定したため、有効にします分析結果を取得するには、関数
xdebug.gc_stats_enable
ブール値を使用する必要があります、デフォルトは 0、ガベージコレクション統計解析を有効にするかどうか
xdebug.gc_stats_output_dir
ガベージ統計解析の書き込みディレクトリ、パーミッションに注意
xdebug.gc_stats_output_name
ガベージ解析ファイルのファイル名、トラッキング解析のファイル名ルールと同じ
xdebug.profiler_enable
Integer、デフォルトは0、1の場合、パフォーマンス分析機能がオンになります
xdebug.profiler_aggregate
Integer、デフォルトは0、0以外の場合、複数のリクエストの分析データがオンになります書き込み クロスリクエスト分析用のファイルを入力します
xdebug.profiler_append
整数、デフォルトは0です。分析ファイルが追加モードを採用するかどうか、ファイル名の設定はこの項目に影響します
xdebug.profiler_enable_trigger
整数、デフォルトが 0 の場合、トリガーモードが使用されます。 プロファイリング機能をオンにする場合は、xdebug.profiler_enable
xdebug.profiler_enable_trigger_value
string をオフにする必要があります。デフォルトは ""、xdebug.profiler_enable_trigger で使用される分析をトリガーするキーです
xdebug.profiler_output_dir
文字列、デフォルトは /tmp、分析ファイルの出力ディレクトリ
xdebug.profiler_output_name
分析ファイルの名前、デフォルトはachegrind.out.%p、xdebug.trace_output_nameを参照
xdebug.extended_info
整数、デフォルトは1、PHPパーサーにextended_infoモードの実行を強制するかどうか
xdebug.idekey
文字列、デフォルト: *complex*、デバッグセッションID、送信by Yunke テストブラウザ デバッグは任意の値で開始できるため、キー値ではありませんが、一部のデバッグクライアントがデバッグ接続を受け入れるかどうかを決定するために使用できるため、統一するのが最善です
xdebug.remote_addr_header
デフォルトはhttp ヘッダーはデバッグ クライアント アドレスを表し、xdebug.remote_connect_back
xdebug.remote_autostart
ブール値 (デフォルトは 0) と組み合わせて使用されます。この項目が設定されている場合、通常は特定の変数を使用してリモート デバッグを開始します。 1にすると、常にオンになります
xdebug.remote_connect_back
ブール値、デフォルトは0、複数人によるデバッグの問題を解決し、設定された固定IPを無視し、リクエストアドレスに従って接続するようにサーバーに指示します
xdebug.remote_cookie_expire_time
整数。デフォルト 3600、リモート デバッグ Cookie の有効期限
xdebug.remote_enable
ブール値、デフォルト 0、リモート デバッグを有効にするかどうか
xdebug.remote_host
文字列、デフォルト: localhost、リモート デバッグ クライアントのアドレス
xdebug.remote_log
文字列、デフォルトempty 、リモート デバッグ ログ ファイル名
xdebug.remote_mode
文字列、リモート デバッグのデフォルト、req スクリプトは開始するとすぐにリンクされます、エラーが発生したときに jit がリンクされます
xdebug.remote_port
リモート デバッグのホスト ポート、デフォルト 9000
xdebug .remote_timeout
integer、デフォルト 200、単位はミリ秒、デバッグリンクの待機時間
xdebug.default_enable
ブール値、1 または 0、xdebug モードでエラー プロンプトを有効にする、デフォルトで有効
xdebug.max_nesting_level
integer、デフォルト: 256、無限再帰 保護メカニズム。再帰呼び出しがこの設定に達すると、プログラムは中断されます。
xdebug.max_stack_frames
整数、デフォルト値 -1、エラー プロンプトが表示されたときにスタック内のフレーム数を表示するように設定します。
xdebug.scream
ブール値、デフォルトは 0 で、エラーが強制的に表示されるように「@」を無効にするかどうかです。
xdebug 拡張機能がオンになった後に利用可能な関数:
拡張機能がロードされると、次の関数が php スクリプトで使用できます:
(ここには一部のみがリストされています。すべてについては https を参照してください ://xdebug.org/docs/all_functions)
string xdebug_call_class( [int $ Depth = 1] )
呼び出しクラスの表示
string xdebug_call_file( [int $ Depth = 1] )
呼び出しファイルを表示
string xdebug_call_function( [int $ Depth = 1] )
呼び出し元の関数を返す
int xdebug_call_line([int $ Depth = 1])
呼び出し行を返す
void xdebug_disable()
スタックトレースを無効にする
void xdebug_enable( )
スタックトレースを有効にする
bool xdebug_is_enabled()
スタックトレースが有効かどうかを確認します
string xdebug_get_collected_errors([int clean])
エラーセットバッファからすべてのエラー情報を返します
array xdebug_get_headers()
header() 関数によって設定されたすべてのヘッダ情報を返します
nt xdebug_memory_usage ( )
メモリ使用量を返す
nt xdebug_peak_memory_usage()
これまでにスクリプトで使用された最大メモリ使用量を返す
void xdebug_start_error_collection()
エラーを収集し、表示を抑制する
void xdebug_stop_error_collection()
エラーログを停止し、バッファから収集する
float xdebug_time_index ()
現在のポイントの実行時間を秒単位で返します
関連する推奨事項:
PHP7 にデバッグ ツール Xdebug 拡張機能をインストールする方法の簡単な紹介
デバッグ ツール Xdebug をインストールする方法に関するチュートリアルPHP7 の拡張機能 (写真)
以上がPHPデバッグツールXdebugの詳しい使い方チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。