1

我已经安装了 NB 7.1、WAMPP 1.7.7(带有 PHP 5.3.8)和 XDebug 2.1.4。我可以检查断点上的变量,好的。但如果发生异常,则 Netbeans 不知道这一点,而浏览器显示 xdebug 格式的调用堆栈。NB 仍然认为“netbeans-xdebug”正在“运行”。所以我的问题是:Netbeans 可以报告 PHP 异常吗?


关于@Andy 的解决方案

我准备此代码进行测试:

<?php

function exceptionHandler($ex) {
    echo 'Uncaught exception: ', $ex->getMessage(), "\n"; // BREAKPOINT
}
set_exception_handler('exceptionHandler');

function errorHandler($errno, $errstr, $errfile, $errline) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler('errorHandler');

throw new Exception;
phpinfo();

?>

Netbeans 停止并报告我的断点,因此解决了一个问题。但 NB 立即显示标题为“Socket Exception”的警报,并附有文字:

发生套接字异常

如果您有手表,请尝试删除它们并重新启动调试器。如果删除 Watches 没有帮助或者您没有任何 Watches,请提交问题并提供重现问题的确切步骤。请附上IDE日志。附加您的项目也将非常有帮助。

我认为 PHP 在发生异常时终止,因此 xdebug 必须停止并且 Netbeans 会丢失配音数据。

4

2 回答 2

3

当您在 Netbeans 中启动调试模式并且未处理的异常通过时,它会输出到您的浏览器,就像您没有运行调试器时一样。

Netbeans 不会神奇地抓住它们。即,您不能以与查看变量内容相同的方式分析它们。

"netbeans-xdebug" is "running" 仍然显示,因为它实际上仍在运行并将继续运行,直到您自己停止它或调试会话发生一些严重错误,这可能与 php 无关。通常,如果发生重大错误,您会看到一些弹出窗口。如果您自己停止它,netbeans 将在您的浏览器中创建一个新选项卡,说明 xdebug 会话已结束。

如果您在浏览器中点击刷新,则 netbeans 将捕获请求并对其进行分析,如果您设置了断点,它将在断点处停止。处理该请求后,如果您再次点击刷新,netbeans 将继续捕获任何进来的请求。

编辑:我在 xdebug 站点上发现的一件事可能会在以下选项中以某种方式对您有所帮助。

xdebug.show_exception_trace
 Type: integer, Default value: 0 
When this setting is set to 1, Xdebug will show a stack trace whenever 
an exception is raised - even if this exception is actually caught.

您可以在 xdebug 部分的 php.ini 文件中设置此选项。

于 2012-05-07T22:27:27.773 回答
2

这种情况的一种解决方法是使用 set_error_handler() 函数设置自定义错误处理程序,然后在该自定义错误处理程序内设置断点。发生错误时,netbeans 将在您的断点处停止,您将拥有对调用堆栈的完全访问权限,您可以在其中查看错误发生时的任何变量。

于 2012-07-03T21:23:20.717 回答