ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター| Xdebugを使用したPHPのデバッグとプロファイリング

PHPマスター| Xdebugを使用したPHPのデバッグとプロファイリング

William Shakespeare
リリース: 2025-02-25 23:30:11
オリジナル
774 人が閲覧しました

XDEBUG:PHP開発者向けの強力なデバッグおよびパフォーマンス分析ツール

コアポイント:

    XDebugは、デバッグサポート、スタックトレース、パフォーマンス分析、コードカバレッジ、その他の機能を提供する強力で無料のオープンソースPHP拡張機能です。これにより、開発者はいつでもアプリケーションの実行を一時停止し、変数の値をチェックして、PHPの実行方法をよりよく理解できます。
  • Xdebugを使用するには、正しく設定して構成する必要があります。 XDebugはXamppまたはMAMPでプリインストールされているため、PHP.iniで有効にします。他のプラットフォームの場合、パッケージマネージャーを介してインストールできます。他のZend拡張機能を使用すると、Xdebugと競合する可能性があることに注意する必要があります。
  • PHPはWeb開発で最も人気のある言語ですが、適切なデバッガーがないために批判されていることがよくあります。 JavaやC#などの言語を使用する開発者は、多くの場合、IDEに直接統合されたデバッグツールの強力なスイートを使用できます。しかし、WebサーバーとPHP IDEの分離により、同じツールの多くを使用することができませんでした。 Xdebugがこのギャップを埋めるまで、コードにデバッグステートメントを手動で追加します。 Xdebugは、Derick Rethansによって作成された無料のオープンソースプロジェクトであり、おそらく最も有用なPHP拡張機能の1つです。基本的なデバッグサポートだけでなく、スタックトレース、パフォーマンス分析、コードカバレッジなども提供します。この記事では、Xdebugのインストールと構成の方法、NetBeansからのPHPアプリケーションのデバッグ方法、およびKcachegrindのパフォーマンス分析レポートの読み方について説明します。

Xdebug

のインストールと構成 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>
ログイン後にコピー
ログイン後にコピー
Xdebugモジュールへのパスを指定します。

値トグル拡張がアクティブであるかどうか。 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

debug

通常、var_dump()exit/die()の組み合わせを使用してデバッグするのは魅力的です。しかし、このアプローチの問題は、デバッグするためにコードを変更する必要があることです。 Xdebugは、必要な場所でアプリケーションの実行を一時停止できるようにすることでこれを克服します。その後、PHPの実行方法をよりよく理解するために、その範囲内の変数の値を確認できます。 XDebugクライアントとして機能するようにNetBeansを簡単に構成できます。 [オプション]ウィンドウ(ツールとGT;オプション)を開き、PHPセクションの[デバッグ]タブに移動します。 php.iniで指定されたデバッグポートとセッションIDを入力すると、デバッグするリクエストを使用してセッションIDを渡す必要があります。 [ツール]タブでデバッグをクリックして、デバッガーを実行できるようになりました。

PHP Master | Debugging and Profiling PHP with Xdebug

ソースファイルを開いた後、ツールバーの[デバッグ]ボタンをクリックしてデバッグを開始します。ブラウザでアプリケーションを開き、オプションウィンドウで「最初の行の停止」オプションが有効になっている場合、PHPの実行はファイルの最初の行で一時停止されます。それ以外の場合は、最初のブレークポイントに遭遇するまで実行されます。そこから、[続行]ボタンを使用して、次のブレークポイントまで続行できます。ブラウザURLバーのXDEBUG_SESSION_STARTパラメーターに注意してください。デバッガーをトリガーするには、XDEBUG_SESSION_STARTをリクエストパラメーター(get/post)またはxdebug_sessionとしてcookieパラメーターとして渡す必要があります。デバッグツールバーには、他にも有用な操作がいくつかあります。彼らは次のとおりです:

  • ステップバイステップ - 現在実行中の行をスキップ
  • 関数へのシングルステップ(非構築関数の場合)
  • シングルステップアウト - 現在の関数から飛び出します

エディターマージンのライン番号をクリックして、ブレークポイントで実行を一時停止することにより、ブレークポイントを追加できます。再度クリックして削除できます。または、プログラム内のすべてのブレークポイントを一覧表示するウィンドウ>デバッグ>ブレークポイントに移動します。必要なブレークポイントのみを選択/解除できます。実行時に、現在のスコープ内の変数のステータスが変数ウィンドウに表示されます。局所変数の値と、$_COOKIE$_GET$_POST$_SERVER

などのスーパーグローバル変数が表示されます。ステートメントを踏むときに、その価値がどのように変化するかを観察できます。

PHP Master | Debugging and Profiling PHP with Xdebug

パフォーマンス分析

パフォーマンス分析は、アプリケーションを最適化する最初のステップです。パフォーマンス分析ツールは、ステートメントや機能を実行するのに必要な時間、コールの数など、重要な詳細を記録します。出力を分析して、ボトルネックがどこにあるかを理解できます。 Xdebugは、PHPのパフォーマンス分析ツールとしても使用できます。アプリケーションの分析を開始するには、次の設定をphp.iniに追加します:
<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は、パフォーマンスアナライザーログのファイル名です(%tspecifierは、タイムスタンプをファイル名に追加します。指定器の完全なリストのドキュメントを参照してください)。 Xdebugは、xdebug.profiler_output_dirで指定されたディレクトリにパフォーマンス分析出力を保存します。選択した場所に変更することはできますが、PHPスクリプトを実行しているユーザーアカウントには書き込み権限が必要である必要があることを忘れないでください。 PHPエンジンは各関数呼び出しを表示し、その詳細を記録する必要があるため、パフォーマンス分析はパフォーマンスを低下させる可能性があるため、常に実行したくありません。 xdebug.profiler_enable_trigger

PHP Master | Debugging and Profiling PHP with Xdebug左パネル(関数の概要)には、実行の順に各関数に費やされた時間が表示されます。右上隅のパネルには、同じ情報がグラフィカルに表示され、サイズは関数のコストに対応しています。コールグラフは、アプリケーションの関数間の関係を表します。この例では、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 Master | Debugging and Profiling PHP with Xdebug

クエリの数が減少するため、パフォーマンス分析により、より良い結果が得られるようになりました。さらに、コードはgetDetails()関数を呼び出さなくなりました。

<?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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート