デバッガーが必要な理由は何ですか?
多くの PHP プログラマーはデバッグに echo、print_r()、var_dump()、printf() などを使用します。実際、豊富な開発経験を持つプログラマーはこれらで十分です。この処理では、特定の変数の値を出力することで、プログラムが正しく実行されたかどうかを判断でき、効率性もわかります(もちろん、いくつかの時間関数を使用する必要がある場合もあります)。では、なぜプログラムの動作を監視するために特別なデバッガが必要なのでしょうか? この質問に対する答えは、後で明らかになるまで残しておいてもよいでしょう。
Xdebug とは何ですか?
Xdebug は、PHP プログラムの実行ステータスを追跡、デバッグ、分析するために使用できるオープンソースの PHP プログラム デバッガー (つまり、デバッグ ツール) です。
Xdebug をインストールするには? :
1. http://www.xdebug.org/download.php を開いて、対応するバージョンをダウンロードします
Win: Windows バイナリ バージョン
Linux: ソース
dll ファイルを取得する (win) か、インストール ファイルを実行します (linux)
2。
Win のインストール: ダウンロードした dll ファイルを対応するディレクトリに配置します。たとえば、私のものは D の下に配置されています: phpize を使用すると、PHP が拡張モジュールをサポートできるようになります) phpize をインストールします: sudo apt-get install php5-dev
インストールされている場合は、次のコマンドを続行します
./configuremake
make install
このインターフェースがあります
cp modules/xdebug.so /usr/lib/php5/20090626+lfs xdebug.so ファイルを php5
3 の下に移動します。 php.ini を編集し、次の行を追加します:
[Xdebug]
zend_extension=D:xamppphpextphp_xdebug.dll (Win)
zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so (Linux)
xdebug。 profiler_enable=on
xdebug.trace_output_dir="../Projects/xdebug"xdebug.profiler_output_dir="../Projects/xdebug"
次のディレクトリ "../Projects/xdebug" は、データ出力を配置する場所です。 by Xdebug ファイルのディレクトリは自由に設定できます。
4. Apache を再起動します
5. の内容を含む test.php を記述します。出力内容に xdebug が表示されれば、インストールと構成は成功しています。
以下に示すように:
それでは、最も簡単なプログラムのデバッグから始めて、
を段階的に紹介しましょう。
デバッグ:
まず、存在しないファイルをインクルードしようとするなど、実行エラーを引き起こす可能性のあるプログラムを作成します。
testXdebug.php
require_once('abc.php');?>
その後、ブラウザからアクセスすると、エラー メッセージが色付きになっていることに驚きました:
ただし、スタイルの変更を除けば、通常出力されるエラー メッセージの内容と何ら変わりはなく、あまり重要ではありません。さて、プログラムの書き換えを続けましょう:
testXdebug2.php
testXdebug();function testXdebug() {testxdebug3.php
copyコードは次のとおりです。 requireFile (); }function requireFile() { つまり、 この機能を使用すると、コードの関係を明確にし、迅速に特定し、迅速にトラブルシューティングを行うことができます。
事実、php関数debug_backtrace()も同様の関数を持っていますが、 debug_backtrace()関数はphp4.3.0およびphp5の後のバージョンでのみ有効になっていることに注意してください。 。この関数は、PHP開発チームがPHP5で追加し、その後PHP4.3にバックポートされた新機能です。
Xdebug を使用してスクリプトの実行時間をテストする方法 特定のスクリプトの実行時間をテストするには、通常、microtime() PHP マニュアルの例: コードの欠陥を検出するにはどうすればよいですか?
場合によっては、コードに明らかな書き込みエラーがなく、エラー メッセージ (error、warning、notice など) が表示されない場合がありますが、これはコードが正しいという意味ではありません。場合によっては、特定のコードの実行に時間がかかりすぎてメモリを大量に占有し、システム全体の効率に影響を与えることがあります。コードのどの部分に問題があるのかを直接確認する方法はありません。現時点では、コードの各段階の動作を監視し、それをログ ファイルに書き込み、一定期間実行した後に分析して問題を見つけたいと考えています。 これらの行の目的は、実行分析ファイルを「../Projects/xdebug」ディレクトリに書き込むことです (設定したい任意のディレクトリに置き換えることができます)。特定のプログラムを実行して、対応するディレクトリを開くと、cachegrind.out.1169585776この形式で名前が付けられたファイルなどのファイルが大量に生成されていることがわかります。これらは、Xdebugによって生成された分析ファイルです。エディタで開くと、プログラムの実行に関する多くの詳細情報が表示されます
最後に:
は、さまざまな組み込み関数を提供し、一部の既存の PHP 関数を上書きします。これは、デバッグやトラブルシューティングに便利に使用できます。Xdebug は、プログラムの実行とログ ファイルを追跡することもできます。分析を通じて、プログラム動作のボトルネックを解消し、プログラムの効率を向上させ、システム全体のパフォーマンスを向上させます。
require_once('abc.php');}?>
出力情報:
コードをコピーします コードは次のとおりです: /**
$time_start = microtime_float();
// スリープしばらくの間
usleep(100 );
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "$time 秒間何もしませんでしたn";
?>
しかし、microtime()によって返される値はマイクロ秒数と絶対タイムスタンプ(「0.03520000 1153122275」など)であり、読み取ることができません。したがって、上記のプログラムでは、この 2 つを追加する別の関数 microtime_float() を作成する必要があります。
Xdebugには時間を表示する関数xdebug_time_index()が付属しています。
スクリプトが占有するメモリを測定するにはどうすればよいですか?
プログラムが特定の実行段階に達したときにプログラムが占有するメモリの量を知りたい場合があります。このために、PHP は関数 memory_get_usage() を提供します。この関数は、PHP が -enable-memory-limit パラメーターを使用してコンパイルされた場合にのみ有効です。
Xdebug は、そのような関数を実装するための関数 xdebug_memory_usage() も提供します。さらに、xdebug は、ピークメモリ使用量を表示するための xdebug_peak_memory_usage() 関数も提供します。
php.iniファイル
を編集して
[Xdebug]xdebug.profiler_enable=on
xdebug.trace_output_dir="I:Projectsxdebug"を追加する前を思い出してください。
xdebug.profile r_output_dir =" I:プロジェクトxデバッグ"