2013-02-28 8 views
7

私はさまざまな評価段階(dev/test/staging/etc)のさまざまな環境でWebサイトを設定することを任されています。読み込みが完了しないPHPスクリプトをデバッグするには?

ただし、私たちのステージング環境では、PHPスクリプトの終了を妨げるいくつかの違いがあるようですので、ページは決してブラウザに配信されません。

接続を切断したときに何らかのスタックトレースやバックトレースを出力する方法があるかどうか、PHPが特定のポイントで何をしているのかを調べる方法があるのだろうか?スクリプトのライフサイクル?

これはDrupalサイトなので、慣れていない多くのコードが含まれており、スクリプトがロードされている場所全体にコマンドdie;を振りかけるのに数時間かかることがあります。

私はおそらく環境の違いを見なければならないことを理解していますが、すべての設定は非常によく似た設定(Ubuntu 11.04)であり、ステージング環境はこの特定のサイトが終了しない間、何らかのものがあれば、このステージングサイトには、問題のない他の環境が利用可能なリソースがさらにあります。

更新日:ごめんなさい、最後に問題が見つかりました。ステージング環境は、パブリックIPを介してアクセスすることが許可されていなかったVLAN上にありました。何らかの理由で(これについてはまだ混乱していましたが)、ページロードの一部として自身にアクセスしようとしていました。ホストファイルエントリを127.0.0.1に設定すると、問題が解決されました。

+1

xdebugを調べましたか? –

+1

ステップバイステップデバッガはオプションですか? http://xdebug.org/docs/remote –

+0

もしあなたが 'die()'を使いたいのであれば、私がやりたいことは、1から1000までの数字を推測するのと同じ方法です。 (250)などのようにしてください。 – h2ooooooo

答えて

3

xDebugのようなツールを使ってこのような問題をデバッグすることはオプションですが、おそらく長時間かかるでしょう - ブレークポイントをどこに置くべきかを見つけることは実際の作業とほぼ同じレベルになるでしょうどこにdieステートメントをコードの周りに置く。デバッガオプションはこれを行う良い方法ですが、大量の未知のコードのどこかに未知のブロッカーがあるような問題がある場合には、比較して保存することはほとんどありません。

xDebugには、プログラムの実行中に呼び出された関数、所要時間、およびボトルネックがどこにあるのかを示すプロファイラツールもあります。これはおそらく始めるのに良い場所になるでしょう。プロファイラトレースを生成するようにxDebugを設定してから、kCacheGrindを使用してグラフィカル環境でトレースを表示してください。

プログラムがループに詰まっている場合や、特定の処理が完了するまでに時間がかかる場合は、問題をほぼ直ちに突き止めることができます。どの機能が時間を費やしているかを正確に把握できるようになります。

これを見た後は、関連するコードを見るだけで問題を見つけることができます。しかし、できない場合は、xDebugのステップスルーデバッガを使用して関数が実行されているかどうかを分析し、変数が何をループしているのかを確認することができます。

はXdebugはここで見つけることができます:

+0

総合的な良い答え。私がもはや必要がなくても、それをペースに入れておく時間がなくても、次回は必然的にこれを告げるでしょう:)感謝! – DanH

2

使用Xdebugの。

非常に簡単にインストールして使用できます。 それは

のロードが終了する前に、PHPスクリプトのステータスを追跡するために、ブレークポイントやステップバイステップのようないくつかのオプションを持って、あなたは

設定xdebugのためのステップtutorilバイステップでavailbleであるsachithsays.blogspot.com/

で、ここからのXDebugをダウンロードすることができます
関連する問題