【发布时间】:2012-03-18 10:30:30
【问题描述】:
我正在尝试让 xdebug 在我的 Mac 上运行。我将 OS 10.6 与 Apache (2.2.1) 和 PHP (5.3.8) 的内置版本一起使用。我按照xdebug网站上的“tailored installation instructions”,基本上就是这几个步骤:
- 从源代码构建 xdebug(版本 2.1.3)
- 将
xdebug.so移动到/usr/lib/php/extensions/no-debug-non-zts-20090626 - 添加到 php.ini: zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so
- 重新启动网络服务器。
据我了解,应该是这样。我知道大多数人将 xdebug 与 PHPEclipse 之类的 IDE 一起使用,但听起来并不是为了在页面上获取调试输出而需要这样做。许多旧指令都涉及安装 MAMP,但看起来不再需要了。
xdebug 工作的迹象: 当我运行php -m 和phpinfo() 时,我得到了关于xdebug 的预期信息。在脚本中,我可以调用 xdebug_is_enabled()(返回 1)和 xdebug_get_function_stack()(返回堆栈)之类的函数。
xdebug 不工作的原因: 我安装 xdebug 的主要原因是在出现错误时获取堆栈跟踪,而这并没有发生。根据this documentation page,只要在php.ini 中将display_errors 设置为On,我就应该得到一个堆栈跟踪(确实如此)。我尝试了应该引起警告的代码(例如,echo(hello))以及产生致命错误的代码(例如,$x->awesomefunction(),当 $x 不是对象时)。两者都不会产生任何 xdebug 输出,而致命错误只会导致页面无声无息地死掉。我链接到的文档中给出的测试代码也没有产生任何结果。
更新:事实证明,如果我从终端运行带有致命错误的脚本,我确实会从 xdebug 获得堆栈跟踪。但是,当我从浏览器运行脚本时,它仍然没有显示
此外,常规错误报告现在已被破坏: 以前,我会通过包含以下命令来获得错误输出:
ini_set("display_errors","1");
ERROR_REPORTING(E_ALL);
现在,将这些行放在我的脚本中也不会产生任何错误报告。 (在浏览器中。当我从终端运行脚本时,它确实会导致显示错误。)
那么,这里有什么问题?我是否在 xcode 安装中遗漏了一些东西?我的系统上是否有一个设置挂在其他地方,抑制错误?我已经尝试了我能想到的一切,但我很乐意测试你的任何想法。
【问题讨论】:
-
您是否尝试在控制台而不是浏览器中运行测试来查找错误?
-
有趣!当我运行从控制台产生致命错误的脚本时,我确实从 xdebug 获得了堆栈跟踪,但是当我在浏览器中运行它时仍然没有。我会用那个更新我的问题......
-
您是否考虑过使用预构建的 LIIP PHP 包?它们包含 xDebug,我发现它们非常易于使用和配置。 php-osx.liip.ch
-
@GordonM 我希望我在几天前就知道这一点,当时我开始对此进行尝试。如果我不能解决这个问题,我会尝试你的建议。