Netbeans可以通过XDebug报告PHP异常吗?

时间:2012-05-07 21:55:40

标签: php debugging exception netbeans xdebug

我安装了NB 7.1,WAMPP 1.7.7(PHP 5.3.8)和XDebug 2.1.4。我可以检查断点上的变量,好的。但是如果发生异常,那么Netbeans就不知道这一点,而浏览器显示xdebug格式的callstack。 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 immadmadly显示标题为“Socket Exception”的警告文字:

  

发生了插座异常

     

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

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

2 个答案:

答案 0 :(得分:3)

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

Netbeans并没有神奇地抓住他们。即你不能像查看变量内容一样分析它们。

“netbeans-xdebug”“运行”仍然显示,因为它实际上仍在运行,并将继续运行,直到你自己停止或调试会话发生一些严重错误,这可能不会是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文件中设置此选项。

答案 1 :(得分:2)

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