8

有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近地组合debug_backtrace(true)获取对象,get_object_vars在每个对象上获取 $this 变量,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和通过。我也想得到and的值。$barargs$barget_object_varsget_defined_vars$temp2$temp

4

2 回答 2

1

在您的(本地)服务器上安装并启用 XDebug。然后使用xdebug_get_declared_vars(). 确保xdebug.collect_vars在 xdebug.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 回答