8

バックトレースで各スタックフレームに設定された変数を表示する方法はありますか?debug_backtrace(true)オブジェクトを取得する、get_object_vars各オブジェクトで$ this vars、args各バックトレースフレームのキーを取得する、およびget_defined_varsグローバルを取得するという組み合わせでかなり近づくことができますが、関数内に設定された一時変数は方法を見つけることができません取得します。

状況の例を次に示します。

function method1($foo) {
    $temp = method2($foo + 1);
    foreach ($temp as $t) {
        method2($t);
    }
}

function method2($bar) {
    $temp2 = $bar->value + $_GET['val'];
    debug();
}

function debug() {
    // to be created
    $global_scope = get_defined_vars();
    $bt = debug_backtrace(true);
}

バックトレースのキー、からのオブジェクト変数、およびからのグローバルを取得できます。との価値も知りたいです$foo$barargs$barget_object_varsget_defined_vars$temp2$temp

4

2 に答える 2

1

(ローカル) サーバーに XDebug をインストールして有効にします。次に、 を使用しますxdebug_get_declared_vars()xdebug.collect_varsxdebug.iniファイルで On に設定していることを確認してください。

例:

<?php
    class strings {
        static function fix_strings($a, $b) {
            foreach ($b as $item) {
            }
            var_dump(xdebug_get_declared_vars());
        }
    }
    strings::fix_strings(array(1,2,3), array(4,5,6));
?>

戻り値:

array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'item' (length=4)

xdebug.org の

関数は、関数xdebug_get_declared_vars()が呼び出されたスコープ内の変数のみを返すことに注意してください。

于 2015-08-20T13:53:15.687 に答える
-1

デバッグを変更して、1 つのパラメーターを取得します。次に、get_defined_varsを渡すだけです。これにより、ローカル スコープ内のすべての変数の配列が得られます。

于 2011-02-01T02:46:09.480 に答える