<コード>コード>
<pre class="brush:php;toolbar:false;">// いくつかのコード some/path/to/object を使用します。 $database = 新しいデータベース(); "some/file/reference.php" を含めます。 試す { // $_SESSION データなど色々 if (empty($_SESSION['b']) || empty($_POST['d'])) { if(empty($_SESSION['b'])) { error_log("セッションが空のようです。b はありません"); } if(empty($_POST['d'])) { error_log("POST が空のようです。いいえ"); } throw new RuntimeException('指定された検証/フォームの詳細が正しくありません。'); } } catch (RuntimeException | Exception $ex) { error_log("ログインページ: ".$_SESSION['メッセージ']); error_log("デバッグ: ".print_r(debug_backtrace(),true)); }</pre> <p>ただし、このコードは実行され、エラーが正しく収集されますが、エラー ログには次の内容のみが表示されます: </p> <ブロック引用> <p>[31-Jul-2023 18:42:17 Europe/London] $_SESSION['message'] からのカスタム フィードバック メッセージ</p><p> [2023 年 7 月 31 日 18:42:17 ヨーロッパ/ロンドン] 配列</p><p> (<br /> )</p> </blockquote> <p>ここで debug_backtrace() が空なのはなぜですか?少なくとも、ページによって提供されるパラメーターと変数、または SESSION データまたは環境データが表示されることを期待していました。 <br /><br />私はこの方法を他の場所でも使用しましたが、(私の記憶している限りでは)うまくいきました。私は何か見落としてますか? </p>
リーリーdebug_backtrace()
は、現在の場所をトレースできるコール スタックを提供しますが、すでに最も外側 (つまりグローバル) スコープにいて、呼び出しを行っていないため、コール スタックは利用できません。生成される結果は次のとおりです:
リーリーコードを関数に入れると、1 つの項目を含む呼び出しスタックが得られます。
リーリー生成される結果は次のとおりです:
リーリーグローバル スコープで (最小限の) デバッグ情報を取得したい場合は、すべてのコードをクロージャでラップし、すぐにインラインで呼び出すことができます。 リーリー ###結果### リーリー
セッション/環境データに関しては、パラメータとして渡した場合にのみ表示されます:リーリー ###結果:### リーリー
このようにセッション/環境変数をログに記録したい場合、おそらく最良の方法はそれらを明示的に出力することです:リーリー