PHPDBG は、コードを変更せず、パフォーマンスに影響を与えることなく、PHP 実行環境を制御できる PHP SAPI モジュールです。
PHPDBG は、軽量で強力で使いやすい PHP デバッグ プラットフォームになることを目指しています。 PHP5.4以降で利用可能です。 php5.6 以降のバージョンでは内部的に統合されます。
主な機能:
– シングルステップデバッグ
– 柔軟なブレークポイント メソッド (クラス メソッド、関数、ファイル: 行、メモリ アドレス、オペコード)
–php の eval を直接呼び出すことができます
– 現在実行されているコードを表示できます
– ユーザー空間 API (ユーザーランド/ユーザー空間)
– 統合が簡単
– PHP 構成ファイルの指定をサポートします
–JIT グローバル変数
– readline サポート (オプション)、ターミナル操作がより便利になります
– Java GUI を使用したリモート デバッグ
– 操作が簡単 (詳細はヘルプを参照)
インストール
phpdgb を使用するには、まず php ソース コード パッケージをダウンロードする必要があります。次に、phpdgb のソース コード パッケージをダウンロードし、php ソース コード パッケージの sapi ディレクトリに配置します。最後に、インストール コマンドを実行できます。コンパイルとインストールの例は次のとおりです:
php のソース コード パッケージをダウンロードし、/home/php ディレクトリに配置したとします。
リーリー注意:
1. php バージョンが php5.6 以降の場合、phpdbg は php コード パッケージに統合されているため、個別にダウンロードする必要はありません。
2. コンパイルパラメータに –enable-phpdbg を忘れずに追加してください。
3. コンパイル時パラメータ –with-readline はオプションで追加できます。追加しないとphpdbgの履歴やその他の機能が使用できなくなります。
基本的な使い方
1.パラメータの紹介
phpdbg は、コマンドラインから php をデバッグできる php の sapi です。一般的に使用されるパラメータは次のとおりです:
次のスイッチが実装されています(cli SAPIと同様):
-n php ini を無視します
-c パスで php ini を検索
-z ロード Zend 拡張機能
-d php ini エントリを定義します
次のスイッチは phpdbg のデフォルトの動作を変更します:
-v は静音性を無効にします
-s 有効ステッピング
-e は実行コンテキストを設定します
-b boring – コンソールでの色の使用を無効にします
- .phpdbginit (デフォルトの init ファイル) を無視します
-i .phpgdbinit の場所をオーバーライドします (-I を暗黙的に示します)
-O oplog出力ファイルを設定します
-q 起動時にバナーを印刷しません
-r 真っすぐにジャンプして走ります
-E eval() によるステップスルーを有効にする
注: -rr を渡すと、phpdbg は実行後にコンソールに戻らずに終了します
2. 共通機能
以前に gdb ツールを紹介しました。実際、phpdbg と gdb の機能はいくつかの点で非常に似ています。たとえば、ブレークポイントを設定したり、ステップスルーしたりできます。 Gdb は C または C++ 言語のデバッグに重点を置いているのに対し、phpdbg は PHP 言語のデバッグに重点を置いているというだけです。以下に、phpdbg の一般的なデバッグ機能をいくつか紹介します。デバッグするコードは次のとおりです:
ファイルtest_phpdbg_inc.phpのソースコードは次のとおりです:
リーリーファイルtest_phpdgb.phpのソースコードは次のとおりです:
リーリー3.phpdbgを起動します
phpdbg が正常にインストールされると、インストール ディレクトリの bin ディレクトリに配置されます。 bin ディレクトリに入り、phpdbg を直接入力します。以下の通り:
リーリーデバッグするPHPスクリプトをロードするには、execコマンドを実行するだけです。以下の通り:
リーリーもちろん、phpdbgの起動時にeパラメータを指定することもできます。以下の通り:
リーリー4. ヘルプ情報を表示する
これまでに他のデバッグ ツールを使用したことがある場合は、phpdbg がそれらに似ていることがわかるでしょう。ただし、使用の初期段階では、ヘルプ情報を取得する必要があることがよくあります。 help コマンドを通じてヘルプ情報を取得できます。
リーリー5. ブレークポイントを設定する
ブレークポイントを設定するコマンドはgdbと同じです。それらはすべてbreakであり、略称はbです。ただし、特定のコマンド パラメータは依然として異なります。 gdb のブレークポイント コマンドと同様に、「ファイル名: 行番号」または行番号でブレークポイントを設定できます。さらに、phpdbg には、PHP に固有のブレークポイントを設定するためのメソッドもいくつか提供されています。たとえば、opline に基づいてブレークポイントを設定したり、opcode に基づいてブレークポイントを設定したりします。
ご存知のとおり、PHP コードは最終的にオペコードに解析され、PHP カーネルによって 1 つずつ実行されます。 PHP ステートメントは複数のオペコードに解析される場合があります。オペコードによってブレークポイントを設定できれば、プログラムの実行プロセスをより正確に追跡できます。 phapdbg を使用してブレークポイントを設定する具体的な例を見てみましょう。
opline でブレークポイントを設定します:
ここで言う opline は、メソッドの入り口から始まる現在のコードの行番号です。たとえば、test_phpdgb.php ファイルでは、18 行目のコード「$param = $param + "baba";」の opline は 2 です。
リーリー6. ブレークポイントを表示する
gdb と同様に、phpdbg もブレークポイントを表示するために info Break コマンドを使用します。例は次のとおりです:
リーリー上記の表示から、次のことがわかります。インフォブレークの表示結果にはブレークポイントの種類も表示されます。 # の後の数字はブレークポイント番号です。ブレークポイント番号に基づいてブレークポイントを削除できます。
7. ブレークポイントを削除します
和gdb命令不一样。phpdbg的删除断点不是delete命令,而是break del 命令。示例如下:
...... prompt> break del 1 [Deleted breakpoint #1] prompt> ......
break del 后面的数字1就是断点号。
8、查看代码
phpdbg查看代码的命令也是list。但是和gdb相比,使用的方式更多样一些。
显示指定函数的代码:
...... prompt> l f func 00017: $param = "ali"; 00018: $param = $param + "baba"; 00019: echo "function func $param\n";; 00020: } 00021: prompt> ......
单步执行
phpdbg的单步执行只有一个命令 step。和gdb的step命令差不多。都是一行一行的执行代码。注意,phpdbg是没有next命令的。
.... prompt> s [Breakpoint #0 resolved at func#2 (opline 0x152ba40)] [L19 0x152ba70 ZEND_ADD_STRING C2 @0 ./test_phpdbg.php] >00019: echo "function func $param\n";; 00020: } 00021: ....
继续执行
和gdb一样,phpdbg的继续执行命令也是continue,简写形式为c。
执行php代码
这个是phpdbg的一个特色。可以在调试的过程中使用ev命令执行任意的php代码。如:
...... prompt> ev $var = "val"; val prompt> ev var_dump($var); string(3) "val" ......
可以通过这种方式,在调试过程中动态的修改变量值,查看执行效果。
以上就是本文的全部内容,轻松玩转调试利器PHPDBG,希望大家喜欢。