【发布时间】:2013-12-18 16:07:10
【问题描述】:
PHP 提供了一些令人印象深刻的内省工具:get_defined_vars、get_defined_functions、get_defined_constants、debug_backtrace 等。本质上,这些提供了整个程序状态的视图:堆栈和堆。我想知道如何使用这些工具获得完整的程序状态视图。
范围内的堆和所有定义的变量都可以建模为带标签的有向图。那么有没有可能,例如,写一些东西给我一个 Graphviz/DOT 的描述?我正在想象类似于this article about 'How PHP manages variables' 中的图表或the PHP manual page on garbage collection 中的图表的东西。
【问题讨论】:
-
我认为没有任何方法可以在另一个范围内进行变量,因此您可能无法对所有有趣的事物进行建模。我相信 Xdebug 可以在运行时为您提供所有变量的状态;您也许可以修补它以在某处写入该信息(或者它可能已经可以这样做)。
-
@WaleedKhan 我看了一下 Xdebug,但它似乎提供了一个更漂亮的
var_dump。 (我确实找到了 this GDB extension 来分析堆,但没有尝试过,因为它看起来需要大量设置,并且是三年前编写的,因此可能无法正常工作。) -
什么是状态?我的意思是我可以有一个条件,当 true 将带有常量 B 的类 A 定义为“foo”时,当 false 做同样的事情但使用“bar”作为常量时。此外,您可能对 PHPUnit 是如何做到的感兴趣:github.com/sebastianbergmann/phpunit/blob/3.7/PHPUnit/Util/…
-
@ChadRetz 见Wikipedia article on program state。本质上,它是程序使用的所有内存:变量、堆、堆栈、常量、函数,可能还有其他东西。我最感兴趣的是查看堆或范围内的子集。
-
@jameshfisher xdebug 远不止这些:jtreminio.com/2012/07/…
标签: php introspection callstack heap-dump