2012-01-04 5 views
0

PHPアプリケーションを効果的にデバッグするにはどうすればよいですか?私の現在の方法は、トレース出力を使用することです - 例えば:die( "message")そしてそこからアプリケーションを修正してください。問題は、これはしばしば非常に面倒で非効率的であるということです。私はこのようなことをしたいと思います:PHPのデバッグ手法?

define('DEBUG', true); 

debug({ print_r($arr); }); 

on_debug_die("application exit"); 

しかし、私はPHPがその種の構文をサポートしていないことを知っています。誰かが私を助けることができますか?

答えて

1

:今

define('DEBUG', "DEBUG"); //Comment this line when you are done debugging 

function debug_out($input) { 
    if (defined("DEBUG")) { 
     print_r($input); 
     die; 
    } 
} 

デバッグが必要な時はいつでも、debug_out('...');を呼び出します。

これを行うより良い方法は、もちろん、PhdStormのような、それをサポートするIDEでXDebugのようなデバッグ機能を使用することです。

0

あなたが誤解しない限り、debug()の使用は簡単に実装できます:$ arrを引数として渡し、関数内でprint_r()を渡すだけです。 on_debug_die()の動作を説明できますか?

0

どのようにですか?

function on_debug_die($msg) { 
    if (defined('DEBUG')) die($msg); 
} 

on_debug_die(print_r($arr,1)); 

var_dump()関数には問題があるかもしれませんが、それは目的を絞るのにもっと便利ですが、解決することもできます。

ただし、die()を使用すると、最初のプログラムの実行が停止します。

DEBUG定数が定義され trueに評価された場合、これはチェックします
function debug($val) { 
    if (defined('DEBUG') && DEBUG) { 
     echo '<pre>', var_dump($val), '</pre>'; 
     die(); 
    }; 
}; 

、および:だから、代わりにdie()trigger_error()を使用すると、あなたがこの機能を利用することができ、この特定の使用のために、より便利

0

のように見えるようですそうであれば、スクリプト実行を効果的に停止し、その直前に$valを出力します。またについていくつかの値や重要なステップをいくつかのファイルに記録することも考えられます - 多くのPHPフレームワークは同様の機能を実装しています。

これはあなたが望むものですか?をデバッグする上もっとあなたはここで読むことができます:あなたはこのようにそれを持つことができますhttp://php.net/manual/en/debugger.php

1

log4phpのようなロギングフレームワークをチェックアウト - あなたはすぐ下のようなステートメントを追加することができます。

$log->debug($arr); 

をし、どのようなレベル(デバッグ、情報を制御するために、中央のログ設定を変更します、警告、エラーなど)が実際に印刷されます。

0

たとえば、xdebugを使用して、実際のデバッガに接続することができます。

それとも次のような関数を定義することができます

function debug() { 
    if (!DEBUG) { 
     return; 
    } 
    $args = get_func_args(); 
    // var_dump, log to file, whatever 
} 

それとも、エラーはほとんど自分自身を報告しますタイプヒント、オブジェクトと投げる例外を使用して、最初からうまくアプリケーションを構築することができます。

1

なぜ使用しないEclipse PDT & Xdebug? またはPHPStorm(別の良いIDEが、払っている)日食PDT &のXDebugやZendデバッガーエンジンを使用して

は、あなたが、ステップのデバッグを行うことができるでしょう(でも、リモートで)変数は、あなたのPHPコードにブレークポイントを置く&検査

これは、トレースよりもアプリをデバッグするための「モダンな」方法です。 トレースが必要ですが、日々の開発には間違いなく効率的です。

2

アプリケーション内にデバッグコードが混在すると、コードの可読性とパフォーマンスが著しく損なわれる可能性があります。私があなたに取るべきアドバイスは、単体テスト(google)について考え始めることです。なぜなら、あなたのアドホックコードはdie文でデバッグするのではなく、決して古いものではないということです。統合されたIDEのデバッグもオプションです(PhpEd、Net Beansなど)。

関連する問題