IDEを介したXdebugの代替として、phpdbgを使用してphp関数をデバッグする

時々、ファイアウォールの「束」、リポジトリなどのローカルIPを介してサーバーを操作する必要があります。このため、NetBeans IDE(および他のIDE)を介して動作するようにXDebugを構成することは非常に困難です。 ローカルの仮想マシンを選択する方が簡単です。 また、XDebugが(多数のレガシーコードを含む)大規模な新しいプロジェクトにすぐに慣れてからerror_logを介してデバッグするためだけに必要な場合、個々のスクリプトのデバッグは必ずしも便利ではありません。



ブレークポイント、接続されたスクリプトを呼び出す余分なスタックなどが正しく機能しません。 または、新しいプロジェクトに慣れるために、xhprofを構成し、このスクリプトまたはそのスクリプトを呼び出すときにチャートで関数呼び出しのスタックをすばやく表示することもできます。 この場合、静的内部で変数の初期化が行われないループで、関数のヒープへの不要な呼び出しのエラーをキャッチするとよいでしょう。 特に、ループ内のデータベースから同じ設定を呼び出します(foreach、for、while、do-while)。 phpdbgと上記のツールの違いは、まれなバグを特定するために、ロジックの一部の機能を具体的にデバッグできることです。 Phpdbgは、おおよそNetBeans(xdebug)に似たコマンドライン(コンソール)デバッグインターフェイスです。 IDEでマウスをクリックしてブレークポイント(ブレークポイント)を指す場合、Phpdbgではコマンドの形でこれを行う必要があります。



簡単なコードの例を挙げましょう。



<?php function EugeneKurilov() { $i = 10; for($j=0;$j<$i;$j++) { //echo $j; } } EugeneKurilov(); ?>
      
      





上記のPHPコードの場合、EugeneKurilov()関数のデバッグを開始するには、次のコマンドを実行する必要があります。



 prompt> break EugeneKurilov [Breakpoint #0 added at EugeneKurilov]
      
      





そして



 prompt> run [Breakpoint #0 in EugeneKurilov() at /root/dbg.php:3, hits: 1] >00003: function EugeneKurilov() { 00004: $i = 10; 00005: for($j=0;$j<$i;$j++) {
      
      







s(ステップ)コマンドを押して、関数の本体を調べて、変数$ jがどのように変化するかを確認するには、watch $ jコマンドを実行する必要があります。



 [Breakpoint #0 in EugeneKurilov() at /root/dbg.php:3, hits: 1] >00003: function EugeneKurilov() { 00004: $i = 10; 00005: for($j=0;$j<$i;$j++) { prompt> watch $j [Set watchpoint on $j]
      
      



次に、s(ステップ)を押して合格します。



 [Breaking on watchpoint $j] Old value: New value: 0 >00005: for($j=0;$j<$i;$j++) { 00006: //echo $j; 00007: } prompt> Old value: 0 New value: 1 >00005: for($j=0;$j<$i;$j++) { 00006: //echo $j; 00007: } Old value: 9 New value: 10 >00005: for($j=0;$j<$i;$j++) { 00006: //echo $j; 00007: } prompt> s [L5 0x7f9d0c088100 IS_SMALLER $j $i ~3 /root/dbg.php] [L5 0x7f9d0c088120 EXT_STMT /root/dbg.php] [L5 0x7f9d0c088140 JMPNZ ~3 J6 /root/dbg.php] [L9 0x7f9d0c088160 EXT_STMT /root/dbg.php] >00009: } prompt> s [L11 0x7f9d0c0735e0 RETURN 1 /root/dbg.php] [Script ended normally]
      
      





つまり、変数の値がどのように変化するかをライブで表示するのはこの方法で非常に簡単であり、error_log(ログで表示する場合)やブラウザーでエコーするようなコードを追加する必要はありません。



Phpdbgは非常にシンプルです(機能を調べるにはヘルプを入力する必要があります)。そのため、すべてのポイントを詳細に説明することは意味がありません。 PHP 5.6以降、デフォルトで有効になっています。 この投稿の私の目標は、コードをデバッグする別の方法を示すことでした。 私の実践が示すように、新しいプロジェクトのさまざまなデバッグツールの通過により、ドキュメントがなく、プロジェクトが多数の従業員によって同時に開発された場合のアーキテクチャをすばやく理解できます。



All Articles