ホームページ バックエンド開発 PHPチュートリアル PHPDBG、PHP デバッグ用の強力なツール

PHPDBG、PHP デバッグ用の強力なツール

Jun 20, 2016 pm 12:36 PM

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 セッションの仕組みとセッションの関連アプリケーションの詳細説明

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

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

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

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

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

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

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

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

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

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

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

See all articles