如何调试永远不会完成加载的PHP脚本?

时间:2013-02-28 10:32:53

标签: php debugging

我的任务是在各种环境中建立一个网站,用于不同的评估阶段(开发/测试/升级/等)。

但是,在我们的暂存环境中,似乎存在一些阻止PHP脚本完成的差异,因此页面永远不会传递给浏览器。

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

这是一个Drupal站点,所以它涉及很多我不熟悉的代码,并且可能需要花费数小时来遍历die;命令以查看脚本加载到的位置。

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

更新:对不起,发现问题到底了。暂存环境位于不允许通过公共IP访问自身的VLAN上,无论出于何种原因(仍然对此感到困惑),它试图将自身作为页面加载的一部分进行访问,并且永远不会完成请求。为127.0.0.1设置主机文件条目修复了该问题。

2 个答案:

答案 0 :(得分:3)

使用像xDebug这样的工具逐步调试这样的问题是一个选项,但可能需要很长时间 - 找到断点的位置与处理的位置大致相同在代码周围放置die语句。调试器选项是一种更好的方法,但相比之下,当你遇到这样的问题时,你会在大量未知代码的某个地方出现一个未知的阻塞程序,这样就不会节省太多。

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

如果您的程序陷入困境,或者特定的事情需要很长时间才能完成,那么这几乎可以直接找出问题;你将能够确切地看到哪个函数占用了时间,以及调用链看起来是什么样的。

很有可能一旦你看到了,你就可以通过查看相关代码来找到问题。但是如果你不能,那么你可以使用xDebug的step-thru调试器来分析函数的运行情况,看看变量的设置是什么,看它为什么循环。

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

答案 1 :(得分:2)

使用xDebug。

它非常易于安装和使用。 它几乎没有选项,如断点,并在完成加载之前逐步跟踪PHP脚本的状态

您可以从这里下载xDebug http://www.xdebug.org/

可以在sachithsays.blogspot.com/

获取有关设置xdebug的逐步tutoril的信息