PHPDBG、PHP デバッグ用の強力なツール
PHPDBG、PHP デバッグ用の強力なツール
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 ディレクトリに配置したと仮定します。
#cd /home/php/sapi#git clone https://github.com/krakjoe/phpdbg #cd ../#./buildconf --force#./config.nice#make -j8#make install-phpdbg
注:
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 を検索します
-zload zend extension
-d define php iniEntry
次のスイッチは phpdbg のデフォルトの動作を変更します:
-v 静粛性を無効にします
-s ステッピングを有効にします
-e 実行コンテキストを設定します
-b 退屈 – コンソールでの色の使用を無効にします
-I 無視します .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 のソース コードは次のとおりです。
<?php function phpdbg_inc_func(){ echo "phpdbg_inc_func \n"; } ?>
ファイル test_phpdgb.php のソース コードは次のとおりです。
<?php include(dirname(__FILE__)."/test_phpdbg_inc.php"); class demo{ public function __construct(){ echo __METHOD__.":".__LINE__."\n"; } public function func($param){ $param++; echo "method func $param\n"; } public function __destruct(){ echo __METHOD__.":".__LINE__."\n"; } } function func(){ $param = "ali"; $param = $param + "baba"; echo "function func $param\n"; } $demo = new demo(); $demo->func(1); func(); phpdbg_inc_func();?>
3. phpdbg を起動します
phpdbg が正常にインストールされると、インストールディレクトリのbinディレクトリにあります。 bin ディレクトリに入り、phpdbg を直接入力します。以下のように:
#phpdeg[Welcome to phpdbg, the interactive PHP debugger, v0.4.0]To get help using phpdbg type "help" and press enter[Please report bugs to <http://github.com/krakjoe/phpdbg/issues>]prompt>
デバッグする PHP スクリプトをロードするには、exec コマンドを実行するだけです。以下のように:
#phpdbg......prompt> exec ./test_phpdbg.php
もちろん、phpdbg の起動時に e パラメータを指定することもできます。以下のようになります。
#phpdbg -e ./test_phpdbg.php
4. ヘルプ情報を表示します
以前に他のデバッグ ツールを使用したことがある場合は、phpdbg とそれらは比較的似ています。ただし、初めて使用するときは、ヘルプ情報を取得する必要があることがよくあります。 help コマンドを通じてヘルプ情報を取得できます。
......prompt> helpphpdbg is a lightweight, powerful and easy to use debugging platform for PHP5.4+It supports the following commands:Information list list PHP source......
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 です。
......prompt> b func#2prompt> rdemo::__construct:5method func 2[Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 resolved at func#2 (opline 0x7f5b230a2e38)][Breakpoint #0 in func()#2 at ./test_phpdbg.php:18, hits: 1]>00018: $param = $param + "baba"; 00019: echo "function func $param\n";; 00020: }......
6、查看断点
和gdb一样,phpdbg也是使用info break命令查看断点。示例如下:
....prompt> info break------------------------------------------------File Breakpoints:#1 /home/hailong.xhl/test_phpdbg.php:10------------------------------------------------Opline Breakpoints:#0 7ff3219e1df0 (function breakpoint)------------------------------------------------Function opline Breakpoints:#0 func opline 2....
通过上面的显示,我们可以知道。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";valprompt> ev var_dump($var);string(3) "val"......
可以通过这种方式,在调试过程中动态的修改变量值,查看执行效果。
以上就是本文的全部内容,轻松玩转调试利器PHPDBG,希望大家喜欢。
延伸阅读
《PHP高级知识进阶》系列技术文章整理收藏
1PHP调试的强悍利器之PHPDBG
2PHP 性能分析(一): XHProf & XHGui 介绍
3现在写 PHP,你应该知道这些
4PHP 之 FastCGI 与 mod_php 详解
5PHP 性能分析与实验:性能的微观分析
6PHP配置文件php.ini中文翻译(全)
7PHP的命令行命令使用指南
8在Linux系统的服务器上隐藏PHP版本号的方法
9PHP SOCKET编程详解
10php中关于socket的系列函数总结
11正确的PHP匹配UTF-8中文的正则表达式
12PHP性能分析工具XHProf安装使用教程
13百度工程师讲PHP函数的实现原理及性能分析(三)
14百度工程师讲PHP函数的实现原理及性能分析(二)
15百度工程师讲PHP函数的实现原理及性能分析(一)
16php以fastCGI的方式运行时文件系统权限问题及解决方法
17PHP中的Streams详细介绍
18PHP SPL标准库之数据结构队列(SplQueue)和优先队列(SplPriorityQueue)
19xss攻击知识入门整理
20PHP SPL标准库之数据结构双链表(SplDoublyLinkedList)
21PHP SPL标准库之数据结构固定长度数组(SplFixedArray)
22php利用反射实现插件机制的方法
23php压缩和解压缩字符串的方法
24PHP自带Session隐患(session文件独占锁引起阻塞)
25Cookie与Session的区别-总结很好的文章
26推荐给开发者的11个PHP框架
27xhprof安装&&使用
28PHP多线程之内部多线程实例分析
29PHP使用QPM实现多进程并行任务处理程序
30PHP多进程处理并行处理任务实例
31PHP多线程编程之管道通信实例分析
32PHP守护进程实例
33php查询mysql大量数据造成内存不足的解决方法
34PHP异常处理
35php开启多进程的方法
36HHVM 是如何提升 PHP 性能的?
37PHP开发者应了解的24个超酷的PHP库(微框架)
38php使用iconv中文截断问题的解决方法
39nginx下支持PATH_INFO详解
40PHP实现的带超时功能get_headers函数
41PHP中实现获取IP和地理位置类分享
42 XDebug を使用して PHP プログラムを分析し、パフォーマンスのボトルネックを見つける
43 PHP 開発者が知っておくべき 5 つの Composer ヒント
44 PHP でセッションを使用してユーザーがバックエンドに不正にログインできないようにする方法
45 PHP 依存関係管理ツール Composer 入門チュートリアル
46PHP は閲覧履歴ページの URL を Cookie に保存するメソッドを実装します
47imagick を使用して PHP で PSD ファイルのサムネイルを生成するチュートリアル
48 QQ 関連の PHP コードに関する Friends Network (QQ の学習に最適な情報)
49 PHP の使い方コールバック関数と注意事項
50PHP セッションは同時実行の問題を引き起こす可能性があります
51smarty カスタム関数 htmlcheckboxes の使用例
52 中央気象台全国天気予報コード例よりphpを収集
53 セッションの仕組みとセッションの関連アプリケーションの詳細説明

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。
