【发布时间】:2011-03-26 00:11:54
【问题描述】:
有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以非常接近地使用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);
}
我可以通过回溯中的args 键获得$foo 和$bar,通过get_object_vars 获得$bar 的对象变量,通过get_defined_vars 获得全局变量。我想要也获得$temp2 和$temp 的值。
【问题讨论】:
-
很好奇你需要这个做什么。
-
XDebug不能满足您的需求吗?安装一个非常简单的调试器时,为什么要重新发明一个成熟的调试器? -
据我所知,XDebug 也只能做顶层堆栈:“使用 xdebug.show_local_vars 设置,您可以指示 Xdebug 为用户显示顶层堆栈级别中可用的所有变量也定义了函数。”部分原因是我可以通过将值绑定到突出显示的源输出变量来快速检查值 Firebug 样式。另一部分只是为了好玩。
-
很遗憾,我在the docs 中也找不到任何内容。 Python can do it,不明白为什么 PHP 不能。
-
这也是我一直在寻找的。至少我现在知道这是不可能的。除非是现在?这对于调试和准确查看哪里出了问题以及变量具有意外值的位置非常有帮助。