PHPixie Debugによる便利なデバッグ

画像

PHPixieデバッグは、あらゆる環境での開発時のデバッグを改善するために作成されました。 もちろん、すでにWebフレームワークを使用している場合は、おそらくデバッグに問題はありませんが、何らかの種類のライブラリを作成したり、問題を解決したり、Wordpressで作業したりすると、便利なデバッグが非常に不足します。 すべてのエラーを例外に変えるような基本的な機能であっても、ハンドラーを登録する必要があります。 このような場合、わずか2行のコードでPHPixieデバッグを行うと、便利な開発環境が作成されます。



例外とトレース



デバッグは、Webフレームワークですでに慣れている例外を操作するのに便利なコンソールを提供します。 ライブラリを作成するとき、例外が発生したコードのその部分の出力を含む美しい有益なトレースが本当に不足していました。 PHPでのトレースの大きな問題は、 print_r(debug_backtrace())を呼び出すだけで、呼び出しの引数の1つがオブジェクトであった場合、結果が大量のテキストに変わることです。 もちろんdebug_print_backtrace()がありますが、まず、配列を完全に表示します。次に、文字列として取得するには、バッファーを使用する必要があります。 PHPixieデバッグ例外トレイルの処理方法は次のとおりです。



<?php require_once('vendor/autoload.php'); $debug = new \PHPixie\Debug(); try{ throw new \Exception("test"); }catch(\Exception $e) { //  $debug->exceptionMessage($e); } echo "\n-------\n"; //   //       //(    ) $debug->registerHandlers(); class Test { public function a($string) { $array = array(1, 2); $this->b($string, $array); } public function b($string, $array) { $object = (object) array('t' => 1); $this->c($string, $array, $object); } public function c() { substr(); } } $test = new Test(); $test->a("pixie");
      
      







 Exception: test 5 6 try{ > throw new \Exception("test"); 8 9 }catch(\Exception $e) { #0 D:\debug\examples\exceptions.php:7 ------- ErrorException: substr() expects at least 2 parameters, 0 given 36 public function c() 37 { >> substr(); 39 } 40 } #0 D:\debug\examples\exceptions.php:38 #1 D:\debug\examples\exceptions.php:38 substr() #2 D:\debug\examples\exceptions.php:33 Test->c('pixie', array[2], stdClass) #3 D:\debug\examples\exceptions.php:27 Test->b('pixie', array[2]) #4 D:\debug\examples\exceptions.php:43 Test->a('pixie') Logged items:
      
      





ちなみに、トレースはPHPエラーを例外に変換したハンドラーを表示しないことに注意してください。他の多くのライブラリーは、それを隠すことを忘れ、トレースを詰まらせます。 PHPixieは、このような介入をすべて呼び出しスタックに隠します。



可変出力



結論は、静的関数\ PHPixie \ Debug :: dump()によって行われます。これは、PHPixieの最初の静的関数です。 この理由は、設計上、デバッグ機能はアプリケーションの一部ではなく、すべてが機能するとすぐにそれらを削除するためです。 したがって、コンストラクタを介して依存関係としてDebugクラスを渡すことは意味がありません。 ここで、ところで、これらの関数は、Debugオブジェクト自体が既に作成されている場合にのみ機能するため、プロキシであり、PHPixieに静的ロジックが存在しないことに注意してください。



 <?php require_once('vendor/autoload.php'); use PHPixie\Debug; $debug = new Debug(); Debug::dump("Array dump:"); Debug::dump(array(1)); Debug::dump("Short array dump:"); //    . //      //      Debug::dump(array(1), true); $object = (object) array('t' => 1); Debug::dump("Object dump:"); Debug::dump($object); Debug::dump("Short object dump:"); Debug::dump($object, true); Debug::dump("Dump trace with parameters"); class Test { public function a($string) { $array = array(1, 2); $this->b($string, $array); } public function b($string, $array) { $object = (object) array('t' => 1); $this->c($string, $array, $object); } public function c() { Debug::trace(); } } $t = new Test(); $t->a("test");
      
      







 'Array dump:' Array ( [0] => 1 ) 'Short array dump:' array[1] 'Object dump:' stdClass Object ( [t] => 1 ) 'Short object dump:' stdClass 'Dump trace with parameters' #0 D:\debug\examples\dumping.php:37 PHPixie\Debug::trace() #1 D:\debug\examples\dumping.php:32 Test->c('test', array[2], stdClass) #2 D:\debug\examples\dumping.php:26 Test->b('test', array[2]) #3 D:\debug\examples\dumping.php:42 Test->a('test')
      
      







ログ



デバッグメッセージをプログラム自体の出力から分離するために、多くの場合、メッセージはプログラム実行の最後に出力される配列に書き込まれます。 唯一の問題は、エラーが発生した場合やexit()がどこかで使用された場合、その後メッセージが表示されないことです。 PHPixieデバッグは、例外の場合にログを表示し、スクリプトの最後にメッセージログの必須出力のハンドラーを登録することもできます。 以下に2つの例を示します。



 use PHPixie\Debug; $debug = new Debug(); Debug::log("test"); Debug::log(array(3)); class Test { public function a($string, $num) { Debug::logTrace(); } } $t = new Test(); $t->a("test", 5); //   $debug->dumpLog();
      
      







 Logged items: [0] D:\debug\examples\logging.php:7 'test' [1] D:\debug\examples\logging.php:8 Array ( [0] => 3 ) [2] D:\debug\examples\logging.php:16 #0 D:\debug\examples\logging.php:16 PHPixie\Debug::logTrace() #1 D:\debug\examples\logging.php:20 Test->a('test', 5)
      
      







そして自動出力で:



 <?php use PHPixie\Debug; $debug = new Debug(); // 'true'    //       // $debug->registerHandlers(true); Debug::log("test"); echo("Logged messages will be printed below");
      
      







 Logged messages will be printed now Logged items: #0 D:\debug\examples\log_handler.php:13 'test'
      
      







結論として



ライブラリの主な目的は、トレースとログの結論そのものではなく、クラスの形式でそれらを便利に表示することです。これにより、実際にはレンダリング用の美しいテンプレートを追加するだけであるため、PHPixieのデバッグのWebバージョンを構築できます。 しかし、独立したツールとしてのデバッグの主な利点は、わずか2行の追加コードで、非Webアプリケーションを開発するための便利な環境が得られることです。 次回、雇用主が巡回セールスマンの問題を解決するか、Wordpressでトレースが必要になったら、このライブラリを覚えて、 debug_backtrace()に費やす時間を節約してください。



デモ



自分の手でデバッグを試すだけで十分です。



 git clone https://github.com/phpixie/debug cd debug/examples #      curl -sS https://getcomposer.org/installer | php php composer.phar install php exceptions.php php logging.php php log_handler.php php dumping.php
      
      







ちなみに、PHPixieの他のすべてのライブラリと同様に、テストでコードを100%網羅し、5.3より古いバージョンのPHP(新しい7とHHVMを含む)で動作します。



All Articles