如何调试PHP脚本?

402

如何调试PHP脚本?

我知道基本的调试技巧,例如使用错误报告。在PHPEclipse中使用断点调试也非常有用。

在phpStorm或其他IDE中,哪种方法是最佳的(以快速简便为标准)?


参见:https://dev59.com/bG445IYBdhLWcg3w6eRo - kenorb
在Win/Mac本地调试(使用WAMP/MAMP堆栈和PHPStorm) - Sliq
40
我认为这是一个很好的问题!当你不知道如何解决PHP调试问题时,你甚至不知道如何表达你的问题,也不知道该比这更加精确。所以,这可能不遵守Stack的规则,但它确实对我们这些初学者有很大帮助! - Mihaela Grigore
1
从php5.4开始,引入了一个名为phpdbg(http://phpdbg.com/)的新命令行界面调试器。PHP5.6将默认带有phpdbg。 - Ganesh Patil
1
你听说过 XDebug 吗? :) - Pratik Joshi
显示剩余2条评论
30个回答

11

我使用带有XDebug的Netbeans和Easy XDebug FireFox插件

在调试MVC项目时,这个插件非常关键,因为XDebug在Netbeans中正常运行的方式是通过URL注册调试会话。安装了FireFox插件后,您可以设置Netbeans项目属性-> Run Configuration-> Advanced并选择“不打开Web浏览器”。现在您可以像往常一样使用Ctrl-F5设置断点并开始调试会话。打开FireFox并右键单击右下角的Add-on图标以开始监视断点。当代码达到断点时,它将停止,您可以检查变量状态和调用堆栈。


11

10

输出缓冲非常有用,如果您不想弄乱您的输出。我可以以一行代码的形式进行此操作,随意添加或删除注释。

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();

这可能会有用 http://www.devarticles.in/php/useful-function-to-output-debug-data-in-php/ - Arvind K.

9

PhpEdit内置了调试器,但我通常以老式的方式使用echo();和print_r();


8

对于那些使用print_r/echo方法解决起来太费时间的问题,我会使用我的IDE(PhpEd)的调试功能。与我使用过的其他IDE不同,PhpEd几乎不需要任何设置。我之所以不在遇到的所有问题中都使用它,唯一的原因是它非常慢。我不确定这种缓慢是具体针对PhpEd还是任何php调试器。PhpEd不免费,但我相信它使用了一个开源调试器(如前面提到的XDebug)。再次强调,PhpEd的好处在于它不需要任何设置,而我发现在过去这确实非常繁琐。


2
PHPEd调试器实际上是由编写PHPEd的同一位开发者所编写,我相信它不是开源的。至少PHPEd没有随源代码一起发布,而是编译成了.so和.dll文件。 - Artem Russakovskii

4
手动调试对我来说通常更快- var_dump()debug_print_backtrace()是您需要为逻辑武装的所有工具。

3

当无法使用Rails时,我经常使用CakePHP。为了调试错误,我通常会在tmp文件夹中找到error.log,并在终端中使用命令tail来查看...

tail -f app/tmp/logs/error.log

它可以在运行过程中提供对cake的详细对话,这非常方便。如果要在代码中输出某些内容,则可以使用此功能。

$this->log('xxxx');

这通常可以让你很好地了解正在发生或出现了什么问题。


3

嗯,在某种程度上这取决于问题出现的位置。这是我尝试隔离的第一件事,然后根据需要使用echo/print_r()。

NB: 你们知道可以将true作为print_r()的第二个参数传递吗?它会返回输出而不是打印它。例如:

echo "<pre>".print_r($var, true)."</pre>";

2
我只是将它包装在一个名为debug的函数中。这样,我就可以执行debug($var)。 - jdelator

2

有许多PHP调试技术可以在编码时节省无数小时。一种有效但基本的调试技术是简单地打开错误报告。另一种稍微更高级的技术涉及使用打印语句,它可以通过显示实际上正在屏幕上发生的事情来帮助定位更难以捉摸的错误。PHPeclipse是一个Eclipse插件,可以突出显示常见的语法错误,并可与调试器一起使用以设置断点。

display_errors = Off
error_reporting = E_ALL 
display_errors = On

并且也被使用

error_log();
console_log();

2

打印调试回溯信息:

类似这样的代码:


就像这里的一个:http://www.devarticles.in/php/useful-function-to-output-debug-data-in-php/ - Arvind K.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接