如何调试PHP脚本?
我知道基本的调试技巧,例如使用错误报告。在PHPEclipse中使用断点调试也非常有用。
在phpStorm或其他IDE中,哪种方法是最佳的(以快速简便为标准)?
如何调试PHP脚本?
我知道基本的调试技巧,例如使用错误报告。在PHPEclipse中使用断点调试也非常有用。
在phpStorm或其他IDE中,哪种方法是最佳的(以快速简便为标准)?
尝试使用Eclipse PDT来安装具有调试功能的Eclipse环境,就像你所提到的一样。步入代码的能力比旧方法在各个点上进行var_dump()
和打印以查看流程错误要好得多。但是如果一切都失败了,我只有SSH和vim,我仍然会使用var_dump()
/die()
来查找代码出错的地方。
kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
的代码。该函数可用于打印并终止程序,并以易于阅读的方式显示数据。 - Francisco Presencia您可以使用Firephp这个firebug的附加组件在与JavaScript相同的环境中调试PHP。
我还使用之前提到的Xdebug来分析PHP。
这是我的小型调试环境:
error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');
function assert_callcack($file, $line, $message) {
throw new Customizable_Exception($message, null, $file, $line);
}
function error_handler($errno, $error, $file, $line, $vars) {
if ($errno === 0 || ($errno & error_reporting()) === 0) {
return;
}
throw new Customizable_Exception($error, $errno, $file, $line);
}
function exception_handler(Exception $e) {
// Do what ever!
echo '<pre>', print_r($e, true), '</pre>';
exit;
}
function shutdown_handler() {
try {
if (null !== $error = error_get_last()) {
throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
}
} catch (Exception $e) {
exception_handler($e);
}
}
class Customizable_Exception extends Exception {
public function __construct($message = null, $code = null, $file = null, $line = null) {
if ($code === null) {
parent::__construct($message);
} else {
parent::__construct($message, $code);
}
if ($file !== null) {
$this->file = $file;
}
if ($line !== null) {
$this->line = $line;
}
}
}
assert_callback
翻译为“断言回调函数”。 - MadbreaksXdebug和Notepad++的DBGp插件适用于重度漏洞猎捕,FirePHP适用于轻量级漏洞。想要快速而不拘小节?没有什么比dBug更好了。
XDebug 对于开发非常重要。我会在安装任何其他扩展之前先安装它。它可以在发生任何错误时提供堆栈跟踪,并且您可以轻松启用分析。
如果想快速查看数据结构,请使用var_dump()
。不要使用print_r()
,因为您需要将其包围在<pre>
标签中并且一次只能打印一个变量。
<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>
我发现最好的实际调试环境是Komodo IDE,但它需要花费$$。
PhpEd真的很好。你可以进入/跳过/退出函数。你可以运行临时代码,检查变量,更改变量。这太棒了。
1)我使用print_r()函数。在TextMate中,我有一个名为“pre”的代码片段,它会被扩展成以下内容:
echo "<pre>";
print_r();
echo "</pre>";
2) 我使用Xdebug,但是在我的Mac上无法正常使用GUI。它至少会打印出可读版本的堆栈跟踪。
echo '<pre>', print_r($var, true), '</pre>';
- DisgruntledGoat老实说,我会用print和print_r()的组合来打印变量。我知道许多人更喜欢使用其他更高级的方法,但我发现这是最容易使用的。
我要说的是,直到我在大学做微处理器编程时无法使用甚至连这种方法都没有充分认识到它的重要性。
Xdebug是由Derick Rethans开发的一个非常好用的工具。我曾经使用过,但发现安装并不是那么容易。不过一旦你安装好了,就会发现你以前是如何没有它而生存的 :-)
在Zend Developer Zone有一篇很好的文章介绍了它(在Linux上安装可能也并不容易),甚至还有一个Firefox插件,但我从未使用过。