XDEBUG:PHP開発者向けの強力なデバッグおよびパフォーマンス分析ツール
コアポイント:
のインストールと構成 XAMPPまたはMAMPを使用している場合、XDEBUGはPHP.iniで有効にする必要があります。 ubuntuなどのプラットフォームでパッケージベースのインストールを使用する場合、
などのコマンドを使用してパッケージマネージャーからインストールできます。私のphp.iniのxdebugのエントリは次のようになります:
apt-get install php5-xdebug
<code>[xdebug] zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so" xdebug.remote_enable=1 xdebug.remote_host=localhost xdebug.remote_port=9000</code>
値トグル拡張がアクティブであるかどうか。 zend_extension
はシステム名またはIPアドレスです(ここでは、同じマシンで動作するためxdebug.remote_enable
を指定しましたが、設定の異なる値を指定する必要がある場合、値はIPアドレスまたはDNSホスト名になります) 。 xdebug.remote_host
は、クライアントがXDebug接続から耳を傾けるポートです(9000はデフォルトです)。 Xdebugを使用する場合は、Xdebugと競合する可能性があるため、他のZend拡張機能を使用していないことを確認してください。他のインストールオプションがあります。 XDebugのWebサイトは、インストールプロセスをガイドするためのシンプルなウィザードを提供します。 localhost
またはxdebug.remote_port
の出力を取得し、テキストボックスに貼り付け、Wizardにサーバーの構成を分析し、マシンにXDebugをコンパイルする方法についてガイドできます。 phpinfo()
php –i
通常、 ソースファイルを開いた後、ツールバーの[デバッグ]ボタンをクリックしてデバッグを開始します。ブラウザでアプリケーションを開き、オプションウィンドウで「最初の行の停止」オプションが有効になっている場合、PHPの実行はファイルの最初の行で一時停止されます。それ以外の場合は、最初のブレークポイントに遭遇するまで実行されます。そこから、[続行]ボタンを使用して、次のブレークポイントまで続行できます。ブラウザURLバーのXDEBUG_SESSION_STARTパラメーターに注意してください。デバッガーをトリガーするには、XDEBUG_SESSION_STARTをリクエストパラメーター(get/post)またはxdebug_sessionとしてcookieパラメーターとして渡す必要があります。デバッグツールバーには、他にも有用な操作がいくつかあります。彼らは次のとおりです: エディターマージンのライン番号をクリックして、ブレークポイントで実行を一時停止することにより、ブレークポイントを追加できます。再度クリックして削除できます。または、プログラム内のすべてのブレークポイントを一覧表示するウィンドウ>デバッグ>ブレークポイントに移動します。必要なブレークポイントのみを選択/解除できます。実行時に、現在のスコープ内の変数のステータスが変数ウィンドウに表示されます。局所変数の値と、
パフォーマンス分析
var_dump()
とexit/die()
の組み合わせを使用してデバッグするのは魅力的です。しかし、このアプローチの問題は、デバッグするためにコードを変更する必要があることです。 Xdebugは、必要な場所でアプリケーションの実行を一時停止できるようにすることでこれを克服します。その後、PHPの実行方法をよりよく理解するために、その範囲内の変数の値を確認できます。 XDebugクライアントとして機能するようにNetBeansを簡単に構成できます。 [オプション]ウィンドウ(ツールとGT;オプション)を開き、PHPセクションの[デバッグ]タブに移動します。 php.iniで指定されたデバッグポートとセッションIDを入力すると、デバッグするリクエストを使用してセッションIDを渡す必要があります。 [ツール]タブでデバッグをクリックして、デバッガーを実行できるようになりました。
$_COOKIE
、$_GET
、$_POST
、$_SERVER
、
<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>
xdebug.profiler_enable
が使用されます。 xdebug.profiler_output_name
は、パフォーマンスアナライザーログのファイル名です(%t
specifierは、タイムスタンプをファイル名に追加します。指定器の完全なリストのドキュメントを参照してください)。 Xdebugは、xdebug.profiler_output_dir
で指定されたディレクトリにパフォーマンス分析出力を保存します。選択した場所に変更することはできますが、PHPスクリプトを実行しているユーザーアカウントには書き込み権限が必要である必要があることを忘れないでください。 PHPエンジンは各関数呼び出しを表示し、その詳細を記録する必要があるため、パフォーマンス分析はパフォーマンスを低下させる可能性があるため、常に実行したくありません。
左パネル(関数の概要)には、実行の順に各関数に費やされた時間が表示されます。右上隅のパネルには、同じ情報がグラフィカルに表示され、サイズは関数のコストに対応しています。コールグラフは、アプリケーションの関数間の関係を表します。この例では、main()とfact()の2つの関数のみがあります。 fact()は再帰関数であり、図のループで表されます。コードを最適化する場合は、総コストが最も高いエリアを探す必要があります。通常、I/O操作は最も高価です。可能な限り最小化することを忘れないでください。意味のある場所にファイルの怠zyなロード。オンラインストアからのすべての注文とその詳細のリストを提供する注文というクラスがあるとします。
このクラスには、getall()とgetDetails()の2つの方法があります。 getAll()メソッドを呼び出すと、すべてのレコードがすべてのレコードを取得し、それらをループしてすべてのレコードの詳細を取得します。パフォーマンス分析情報を見てみましょう。
<code>xdebug.profiler_enable = 1 xdebug.profiler_output_name = xdebug.out.%t xdebug.profiler_output_dir = /tmp xdebug.profiler_enable_trigger = 1</code>
絶対数は重要ではありませんが、プラットフォームとランタイムの条件に依存するため、さまざまな機能の相対的なコストを理解できます。一部の関数は何百回も呼ばれていることに注意してください(もちろん悪いことです)。コードは、すべての注文をループして各注文の詳細を個別に取得する必要はありません。 getall()関数をオーバーライドして、Joinを使用します。
<?php class Orders { protected $db; public function __construct(PDO $db) { $this->db = $db; } public function getAll() { $orders = array(); $query = "SELECT * FROM orders"; $result = $this->db->query($query); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { $row['details'] = $this->getDetails($row['orderId']); $orders[] = $row; } return $orders; } public function getDetails($orderId){ $details = array(); $result = $this->db->query("SELECT * FROM orderdetails WHERE orderId = " . $orderId); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { $details[] = $row; } return $details; } }
概要
(注意:上の写真プレースホルダーは、実際のスクリーンショットに置き換える必要があります。
以上がPHPマスター| Xdebugを使用したPHPのデバッグとプロファイリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。