在每个 PHP 回溯级别获取范围内的变量?

发布于 2024-09-13 06:19:06 字数 848 浏览 8 评论 0原文

有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近地使用 debug_backtrace(true) 的组合来获取对象,在每个对象上使用 get_object_vars 来获取 $this vars、args > 在每个回溯帧中键入,并使用 get_define_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);
}

可以通过回溯中的args键获取$foo$bar$barget_object_vars 的对象变量,以及通过 get_define_vars 的全局变量。我还想要获取$temp2$temp 的值。

Is there a way to view the variables set in each stack frame in a backtrace? I can come pretty close with a combination of debug_backtrace(true) to get the objects, get_object_vars on each object to get $this vars, the args key in each backtrace frame, and get_defined_vars to get globals, but any temporary variables set within a function I can't find a way to retrieve.

Here's an example situation:

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);
}

I can get $foo and $bar via the args key in the backtrace, the object variables of $bar through get_object_vars, and the globals through get_defined_vars. I want to get the value of $temp2 and $temp as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千秋岁 2024-09-20 06:19:06

在您的(本地)服务器上安装并启用 XDebug。然后使用xdebug_get_declared_vars()。确保在 xdebug .ini 文件中将 xdebug.collect_vars 设置为 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() 范围内的变量。

Install and Enable XDebug on your (local) server. Then use xdebug_get_declared_vars(). Make sure that you set xdebug.collect_vars to On in your xdebug .ini file.

Example:

<?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));
?>

Returns:

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

Example from xdebug.org

Note, that the function only returns variables in the scope where the function xdebug_get_declared_vars() is called in.

非要怀念 2024-09-20 06:19:06

更改您的调试以采用 1 个参数。然后只需传入 get_defollow 即可。这将为您提供本地范围内所有变量的数组。

Alter your debug to take 1 param. Then just pass in get_defined_vars. This will give you an array of all the vars in the local scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文