Drupal サイトで、1 人のユーザーの 1 つのページに WSOD (死の白い画面) が表示されました。セグメンテーションエラーが原因であることがわかりました。エラーがどこにあるのかわかりませんか?? gdb を使用して PHP コードをデバッグするにはどうすればよいですか???
4 に答える
極端な状況では、私はLinuxを使用するstrace
ことになりますが、これは主に、問題が内部的なもの(ヘッダー、スタックの問題、クラッシュなど)に関係する場合に使用します。
PHP専用であるため、よりPHP風の方法はxdebugを使用することです。
GDBを使用するには、GDBで使用する他のプログラムと同じように使用します。そこまで到達できない場合は、実際にGDBを使用することもそれほど遠くないでしょう。
ああ、これが命を救うPHPスニペットです:
function the_end(){
if(($err=error_get_last()))
die('<pre>'.print_r($err,true).'</pre>');
}
register_shutdown_function('the_end');
注1:サーバーのクラッシュに対処している場合は、上記が機能しない可能性があります。ただし、これは非常にまれです。
注2:すでに他の場所で使用されている場合register_shutdown_function
は、最終的な実行を確実にするために、必ず繰り返してください。例:
function my_other_final_function(){ /* ... */ }
register_shutdown_function('my_final_function');
function the_end(){ /* ... */ }
function the_end2(){ register_shutdown_function('the_end'); }
register_shutdown_function('the_end2');
私はgdbでそれを行う方法を知りませんが、これは便利かもしれません:
index.php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
そして、XDebugがさらに役立つと思います
サイトで display_errors を true に設定しようとしましたが、うまくいきませんでした。しかし、幸いなことに、デバッグに行く必要はありませんでした。問題は、私が作成したビューにありました。
皆さん、ありがとうございました
エラーは、Webサーバーのエラーログで発生する可能性があります。最初にそこを見てください。