ホームページ  >  に質問  >  本文

debug_backtrace() が空を返すのはなぜですか?

<p>PHP 7.4 で実行される PHP コードがあります。 <br /><br />その一部はトップレベルの PHP スクリプト (/home/path/a.php) であり、一連の try-catch ブロックと、オブジェクトとインクルード ファイルのペアが含まれています。 . さまざまな呼び出し。 <br /><br />これらの try-catch ブロックは、顧客エラーや実行時エラーが発生した場合に例外をスローします。 <br /><br /> throw ステートメントには、エラー ログに出力される debug_backtrace() を含むエラー ログが含まれます。 </p>gt;

<コード>

<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>


P粉204136428P粉204136428471日前427

全員に返信(1)返信します

  • P粉291886842

    P粉2918868422023-08-01 00:11:59

    debug_backtrace() は、現在の場所をトレースできるコール スタックを提供しますが、すでに最も外側 (つまりグローバル) スコープにいて、呼び出しを行っていないため、コール スタックは利用できません。

    リーリー

    生成される結果は次のとおりです:

    リーリー

    コードを関数に入れると、1 つの項目を含む呼び出しスタックが得られます。

    リーリー

    生成される結果は次のとおりです:

    リーリー

    グローバル スコープで (最小限の) デバッグ情報を取得したい場合は、すべてのコードをクロージャでラップし、すぐにインラインで呼び出すことができます。 リーリー ###結果### リーリー

    セッション/環境データに関しては、パラメータとして渡した場合にのみ表示されます:

    リーリー ###結果:### リーリー

    このようにセッション/環境変数をログに記録したい場合、おそらく最良の方法はそれらを明示的に出力することです:

    リーリー

    返事
    0
  • キャンセル返事