【问题标题】:Can I print the entire program state in PHP?我可以在 PHP 中打印整个程序状态吗?
【发布时间】:2013-12-18 16:07:10
【问题描述】:

PHP 提供了一些令人印象深刻的内省工具:get_defined_varsget_defined_functionsget_defined_constantsdebug_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


【解决方案1】:

检查 xdebug 以及 xdebug chrome 扩展。 https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc?hl=en

该扩展可用于启用 php 的分析/调试。您可以将它与 eclipse 或任何其他支持 xdebug 的 ide 链接以进行调试。

如果您生成配置文件,您可以将结果放入 kcachegrind 或 wincachegrind 以获取内存分配、每个函数花费的时间和其他内容的地图视图。

https://www.youtube.com/watch?v=YHKFdfbcP8U

【讨论】:

    【解决方案2】:

    如果您生成配置文件,您可以将结果放入 kcachegrind 或 wincachegrind 以获取内存分配、每个函数花费的时间和其他内容的地图视图。

    https://www.youtube.com/watch?v=YHKFdfbcP8U

    【讨论】:

    • 有趣——我会试试这个。
    【解决方案3】:

    我不知道是否有任何现有的工具,但您绝对应该检查 xdebug 分析器http://xdebug.org/docs/profiler 和 kcachegrind。它将为您提供整个堆栈的可视化:被调用的每个函数、被调用的次数以及它/它们花费了多长时间。

    【讨论】:

      【解决方案4】:

      get_defined_vars
      get_defined_functions
      get_defined_constants

      有没有办法从 php 文件中获取用户定义的 php 函数、变量、常量?以下函数不是最好的方法,因为它们获得了所有贴花函数/vars/constants(具有数百个 php 的内置常量和内部 php 函数

      【讨论】:

        猜你喜欢
        • 2013-09-29
        • 2021-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 2016-08-06
        • 2016-10-24
        相关资源
        最近更新 更多