gpt4 book ai didi

php - 如何调试从未完成加载的 PHP 脚本?

转载 作者:可可西里 更新时间:2023-11-01 12:55:45 26 4
gpt4 key购买 nike

我的任务是针对不同的评估阶段(开发/测试/暂存等)在各种环境中建立网站。

然而,在我们的暂存环境中,似乎有一些不同之处阻止 PHP 脚本完成,因此页面永远不会传送到浏览器。

我想知道是否有一种方法可以输出以在切断连接时记录某种堆栈跟踪或回溯,或者是否有其他方法可以查明 PHP 在脚本的任何给定点上究竟在做什么生命周期?

这是一个 Drupal 站点,因此它涉及很多我不熟悉的代码,并且可能需要数小时才能散布 die; 命令以查看脚本加载到哪里。

我知道我可能应该查看环境的差异,但是所有环境都应该具有非常相似的配置(Ubuntu 11.04),并且暂存环境似乎很乐意为其他 PHP 站点提供服务,而这个特定站点拒绝完成。如果有的话,这个暂存站点比其他没有问题的环境有更多的可用资源。

更新:抱歉大家,问题终于找到了。暂存环境位于不允许通过公共(public) IP 访问自身的 VLAN 上,并且出于某种原因(仍然对此感到困惑)它试图将自身作为页面加载的一部分进行访问,但从未完成请求。为 127.0.0.1 设置一个主机文件条目解决了这个问题。

最佳答案

使用 xDebug 之类的工具逐步调试此类问题是一种选择,但可能会花费很长时间——找到断点的位置与确定断点的位置大致相同在代码周围放置 die 语句。调试器选项是一种更好的方法,但相比之下不会节省太多,当你遇到这样的问题时,你在某个地方有大量未知代码的未知阻止程序。

但 xDebug 还有一个分析器工具,可以向您显示在程序运行期间调用了哪些函数,它们花费了多长时间,并突出显示瓶颈所在。这可能是一个更好的起点。只需配置 xDebug 以生成分析器跟踪,然后使用 kCacheGrind 在图形环境中查看跟踪。

如果您的程序陷入循环或某些特定的事情需要很长时间才能完成,这几乎可以立即查明问题所在;您将能够准确地看到哪个函数占用了时间,以及到达它的调用链是什么样的。

很可能一旦你看到了,你就可以通过查看相关代码来找到问题所在。但如果不能,则可以使用 xDebug 的步进式调试器在函数运行时对其进行分析,并查看变量设置的内容以了解其循环的原因。

xDebug 可以在这里找到:http://www.xdebug.org/

关于php - 如何调试从未完成加载的 PHP 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com