検索
ホームページバックエンド開発PHPチュートリアルXdebugの使い方を詳しく解説 PHP debugger_PHPチュートリアル
Xdebugの使い方を詳しく解説 PHP debugger_PHPチュートリアルJul 13, 2016 pm 05:42 PM
phpxdebugのために使用できるそしてあなた情報処理システムマネジメント詳しい説明デバッガ

PHP を使用してシステム管理や従来のデータ処理などのタスク用のコマンドライン スクリプトを作成できますが、プログラミング言語は Web アプリケーションのパフォーマンスに大きな影響を与えます。使用中、各 PHP アプリケーションはサーバー上に常駐し、受信リクエストを処理するためにプロキシ (Apache など) 経由で PHP アプリケーションが呼び出されます。一般的な PHP Web アプリケーションは、リクエストごとに、短い実行後に Web ページまたは XML データ構造を取得します。

クライアント、ネットワーク、HTTP サーバー、アプリケーション コード、基盤となるデータベースを含むレイヤーで構築された Web アプリケーションは、単純な実行を想定した場合、PHP コード内のエラーを分離するのが困難になります。 PHP コードを除くすべてのレイヤーが適切に機能していると仮定しても、特にアプリケーションが多数のクラスを使用している場合、PHP コードのバグを追跡することは非常に困難になる可能性があります。

PHP ステートメント echo と関数 var_dump()、debug_zval_dump()、print_r() は、さまざまな問題の解決に役立つ、一般的で人気のあるデバッグ支援ツールです。ただし、これらのステートメント、および PEAR Log パッケージなどのさらに強力なツールは、証拠を生成するために、まずコンテキストの外で推測的に分析する必要があるフォレンジック ツールです。

推論によるデバッグは、ある意味、無謀なアプローチです。データを収集して精査し、何が問題だったのかを推測します。重要な情報が欠落している場合は、コードを再テストし、手順を繰り返し、調査を再度開始する必要があります。より効率的なアプローチは、アプリケーションの実行中にプローブすることです。リクエスト パラメーターを並べ替えたり、プロシージャ コール スタックをフィルターしたり、必要な変数やオブジェクトをクエリしたりできます。アプリケーションを一時的に中断し、変数の値が変更されたときにアラートを受け取ることができます。場合によっては、「もしも?」という質問を対話的に行うことで、実際に変数に影響を与えることができます。

デバッガーと呼ばれる特別なアプリケーションは、この「リアルタイム」または対話型検査をサポートします。プロセスを制御し、そのメモリを監視するために、デバッガを起動してプロセスに接続することができます。あるいは、インタープリター型言語の場合、デバッガーはコードを直接解釈できます。典型的な最新のグラフィカル デバッガは、コードのインデックス付けと参照を行い、複雑なデータ構造を人間が判読できる形式で簡単に表示し、同時にコール スタック、中間出力、すべての変数の値などのプログラムの状態を表示できます。たとえば、デバッガは通常、クラスのプロパティとメソッドを分類して説明します。

今回と次回の記事では、PHPのデバッグを確実に簡略化してくれるツールを紹介していきます。次回は、インタラクティブなデバッグと、PHP 専用の堅牢なデバッガである Zend デバッガに焦点を当て、それが提供する多くの機能を探っていきます。 (Zend Debugger は商用製品であり、Zend PHP 統合開発環境 (IDE) の一部です)。コードではなくビールにお金を費やさないように、オープンソースの PHP デバッガも紹介します。ただし、この記事では、証拠をより効果的に収集する方法に焦点を当てます。

CSIに似ていますが、より煩わしいだけです

コードが間違っている場合、望ましい結果が得られない場合、または完全にクラッシュした場合は、「どこで、何を、なぜ、いつ」という 4 つの質問に答える必要があります。

「どこ」はアプリケーションが最後に正常に実行されたファイルと行番号です。

「何」は間違いのコードです - 例えば、容疑者。

「なぜ」が間違いの本質である。おそらく、論理エラーおよび/またはオペレーティング システムとの相互作用によって引き起こされるエラー、またはその両方である可能性があります。

そして「when」はエラーが発生したときのコンテキストです。プログラムが終了する前に何が起こったのでしょうか? すべての犯罪と同様、十分な手がかりを集めることができれば、犯人を見つけるのに役立ちます。

フォレンジックツール Xdebug (前回の記事で PHP アプリケーションのパフォーマンスを分析するために使用したツール) は、名前が示すように、プログラムのステータスを示すいくつかの関数を提供し、コマンド システムに追加する必要がある値です。研究ツール (「参考文献」を参照)。 Xdebug をインストールすると、(表面上は) 無限再帰を防止し、スタック トレースと関数トレースに関するエラー メッセージを修正し、メモリ割り当てを監視するなどの機能が実行されます。 Xdebug には、実行時エラー診断のためにコードに追加できる一連の関数も含まれています。

たとえば、次のコードは、いくつかの xdebug_...() ステップを使用して callee() 関数をテストし、ファイル名、行番号、呼び出し関数の名前など、呼び出しプログラムの正確な場所を出力します。

リスト 1. callee() 関数をテストする手順

関数呼び出し先( $a ) {

echo sprintf("callee() が @ %s に呼び出されました: %s から %s",

xdebug_call_file(),

xdebug_call_line(),

xdebug_call_function()

);

}

$result = callee( "arg" );

?>

このコードは以下を生成します:

callee() が @ /var/www/catalog/xd.php を呼び出しました: 10 from {main}

上に戻る Xdebug のビルドとインストール

Xdebug は、Mac OS X を含む UNIX® 系オペレーティング システムのソース コードから簡単に構築できます。 Microsoft® Windows® で PHP を使用している場合は、バイナリ Xdebug モジュールの最新の PHP バージョンを Xdebug Web サイトからダウンロードできます (「参考文献」を参照)。

Debian “Sarge” Linux® と PHP V4.3.10-19 用の Xdebug をビルドしてインストールしましょう。この記事の執筆時点で、Xdebug の最新バージョンは V2.0.0RC4 で、2007 年 5 月 17 日にリリースされました。この記事を続けるには、phpize ユーティリティと php-config ユーティリティが必要で、システムの php.ini 構成ファイルを編集できる必要があります (ユーティリティがない場合は、PHP.net にアクセスしてソース コードと手順を参照してください) PHP をゼロから構築する方法について)。次の手順に従ってください:

Xdebug tarball (gzip 圧縮された .tar アーカイブ) をダウンロードします。 wget コマンドを使用すると、これを簡単に行うことができます。 $ wget http://www.xdebug.org/files/xdebug-2.0.0RC4.tgz

tarball を解凍し、ソース コード ディレクトリに切り替えます: $ tar xzf xdebug-2.0.0RC4.tgz

$ cd xdebug-2.0.0RC4

phpize を実行して、お使いの PHP バージョン用の Xdebug コードを準備します: $ phpize

設定:

PHP API バージョン: 20020918

ZendモジュールAPI番号:20020429

Zend Extension API No: 20021010

phpize の出力は、ビルド プロセスの残りの部分を微調整するために使用されるスクリプト (通常は configure という名前) です。

設定スクリプトを実行します: $ ./configure

ビルドシステムのタイプを確認中... i686-pc-linux-gnu

ホストシステムのタイプを確認中... i686-pc-linux-gnu

gcc をチェック中... gcc

C コンパイラのデフォルトの出力ファイル名を確認しています... a.out

Cコンパイラが動作するか確認中…はい

クロスコンパイルしているかどうかを確認しています...いいえ

実行可能ファイルのサフィックスをチェックしています...

オブジェクトファイルのサフィックスをチェック中...o

ライブラリのストリッピングが可能かどうかを確認中...はい

設定タグ「F77」をlibtoolに追加します

設定: ./config.status の作成

config.status: config.h を作成しています

make を実行して Xdebug 拡張機能をビルドします: $ make

/bin/sh /home/strike/tmp/xdebug-2.0.0RC4/libtool

--mode=compile gcc -I.

-I/home/strike/tmp/xdebug-2.0.0RC4 -DPHP_ATOM_INC

-I/home/strike/tmp/xdebug-2.0.0RC4/include

-I/home/strike/tmp/xdebug-2.0.0RC4/main

-I/home/strike/tmp/xdebug-2.0.0RC4

-I/usr/include/php4 -I/usr/include/php4/main

-I/usr/include/php4/Zend -I/usr/include/php4/TSRM

-DHAVE_CONFIG_H -g -O0 -c

/home/strike/tmp/xdebug-2.0.0RC4/xdebug.c -o

xdebug.lo mkdir .libs

ビルド完了

(tempnam と tmpnam に関する警告は無視しても安全です)。

makeを使うとXdebug拡張子xdebug.soが生成されます。

拡張機能をインストールします: $ sudo make install

共有拡張機能のインストール: /usr/lib/php4/20020429/

続行する前に、マウスを使用して、前のコマンドで表示されたディレクトリを選択してコピーします。このパスは、拡張機能を構成する最終ステップで重要です。

好みのテキストエディタでphp.iniファイルを開き、次のコードを追加します: zend_extension = /usr/lib/php4/20020429/xdebug.so

xdebug.profiler_enable = オフ

xdebug.default_enable = オン

最初の行は Xdebug 拡張機能をロードします; 2 行目は Xdebug のプロファイラー機能を無効にし (単純にするためです)、3 行目は拡張デバッグ機能を有効にします。

Xdebug 拡張機能がインストールされ有効になっていることを確認するには、Web サーバーを再起動し、コード

を使用して単純な 1 行の PHP アプリケーションを作成します。ブラウザで http://localhost/phpinfo.php などのファイルを指定して下にスクロールすると、図 1 のような内容が表示されるはずです。

図 1. Xdebug 拡張機能がインストールされ、実行されているかどうかを確認します

Xdebug 扩展已启用

注: phpinfo() の出力に Xdebug セクションが表示されない場合は、Xdebug の読み込みが失敗しています。 Apache エラー ログに理由がリストされています。一般的なエラーには、zend_extension への間違ったパスや他の拡張機能との競合が含まれます。たとえば、XCache と Xdebug を使用する必要がある場合は、必ず最初に XCache をロードしてください。ただし、Xdebug は開発中に使用することを目的としており、xdebug.so へのパスが正しいことを前提としているため、他の拡張機能を無効にして再試行する必要があります。その後、拡張機能を再度有効にして、キャッシュの影響などの追加のテストを実行できます。 Xdebug サイトには、その他のトラブルシューティングのヒントがいくつかあります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486020.html技術記事 PHP を使用すると、システム管理や従来のデータ処理などのタスク用のコマンド ライン スクリプトを作成できますが、プログラミング言語は Web アプリケーションのパフォーマンスに大きな影響を与えます。使用中…
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在生产服务器上启用XDebug会使PHP变慢吗?在生产服务器上启用XDebug会使PHP变慢吗?Sep 22, 2023 pm 10:41 PM

是的,像XDebug这样的调试器会降低PHP服务器的性能。这就是调试器不放置在服务器环境中的原因。它们部署在不同的环境中,以避免不必要的开销。调试消息无法在已处于生产阶段的应用程序中显示。当将调试行为添加到服务器上,调试引擎附加到PHP进程。它开始接收消息以在断点处停止,但这不是必需的行为,因为它会给其他进程带来高性能打击,从而停止PHP解析器。另一方面,当调试器安装后,它们往往会在服务器中打开端口,因为它们不打算在生产环境中使用。在服务器中打开端口就像为黑客打开一扇窥探之门一样糟糕。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

php怎么将url的参数转化成数组php怎么将url的参数转化成数组Apr 21, 2022 pm 08:50 PM

转化方法:1、使用“mb_substr($url,stripos($url,"?")+1)”获取url的参数部分;2、使用“parse_str("参数部分",$arr)”将参数解析到变量中,并传入指定数组中,变量名转为键名,变量值转为键值。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!