你如何调试PHP脚本?

Mar*_*cel 403 php eclipse debugging xdebug phpstorm

你如何调试PHP脚本?

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

在phpStorm或任何其他IDE中调试的最佳方法(快速简便)是什么?

Joh*_*ney 145

尝试使用Eclipse PDT来设置具有您提到的调试功能的Eclipse环境.进入代码的能力是调试var_dump的旧方法并在各个点打印以查看流程出错的更好方法.当所有其他方法都失败了,而我所拥有的只是SSH和vim,我仍然var_dump()/ die()找到代码向南的位置.

  • 你应该使用这个函数:kill($ data){die(var_dump($ data)); 它节省了输入10个字符,我写过的最好的功能tbh :) (35认同)
  • @ AlexMorley-Finch我把你叫到'kill($ data){echo"<pre>"; 的var_dump($数据); echo"</ pre>"; 出口; }` (6认同)
  • 试试https://github.com/tomasfejfar/enhanced-dump :) (2认同)
  • 有没有办法美化"var_dump"? (2认同)
  • 链接是通过令人难以置信的[Web存档](https://web.archive.org/web/20150507142619/http://dev.piwik.org/trac/wiki/HowToSetupDevelopmentEnvironmentWindows)"可恢复",最后一次检查截至7月5日'15. (2认同)

Pat*_*Pat 80

您可以使用Firephp作为firebug的附加组件来在与javascript相同的环境中调试php.

我还使用前面提到的Xdebug来分析php.

  • 以下是使用FirePHP的快速指南:http://www.sitepoint.com/debug-php-firebug-firephp/ (3认同)

eis*_*erg 38

这是我的小调试环境:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `assert_callcack`嘿 (4认同)
  • 谢谢.这节省了我的一天.(我只需删除那个E_STRICT) (2认同)

djn*_*djn 32

Xdebug和用于Notepad ++的DBGp插件用于重载bug,FirePHP用于轻量级的东西.快又脏?没有什么比dBug更好了.


Jul*_*sar 26

XDebug对于开发至关重要.我在任何其他扩展之前安装它.它为您提供任何错误的堆栈跟踪,您可以轻松启用分析.

快速浏览一下数据结构的使用方法var_dump().不要使用,print_r()因为你必须用<pre>它包围它,它一次只打印一个var.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>
Run Code Online (Sandbox Code Playgroud)

对于一个真正的调试环境,我发现最好的是Komodo IDE,但它的成本为$$.


mon*_*boy 19

PhpEd真的很棒.您可以进入/退出/退出功能.您可以运行特殊代码,检查变量,更改变量.真是太棒了.

  • 我使用过PhpEd,与NetBeans或Eclipse等真正的IDE相比,我没有任何客气话,这个评论也没有添加任何有用的问题.-1 (4认同)

jll*_*anc 17

1)我使用print_r().在TextMate中,我有一个"pre"的片段,它扩展为:

echo "<pre>";
print_r();
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

2)我使用Xdebug,但无法让GUI在我的Mac上正常工作.它至少打印出堆栈跟踪的可读版本.

  • 您也可以将'true'传递给函数,以便返回字符串.这意味着你可以这样做:`echo'<pre>',print_r($ var,true),'</ pre>';` (9认同)

Mic*_*tum 16

我已经使用Zend Studio(5.5)Zend Platform.这给了适当的调试,断点/踩到代码等,虽然付出了代价.


Tei*_*ion 16

老实说,print和print_r()的组合打印出变量.我知道很多人更喜欢使用其他更高级的方法,但我发现这是最容易使用的方法.

我会说,直到我在Uni进行了一些微处理器编程并且甚至无法使用它之前我并没有完全理解这一点.


Chr*_*yer 14

Derick Rethans的Xdebug非常好.我前段时间使用它,发现安装起来并不容易.完成后,如果没有它,你将无法理解你的管理方式:-)

关于Zend Developer Zone的一篇很好的文章(在Linux上安装似乎并不容易)甚至是一个我从未使用过的Firefox插件.

  • 它不只是安装令人沮丧.配置Xdebug以使用Eclipse可能是一场噩梦.我能够在CentOS 5上安装Xdebug,但EclipsePDT + Xdebug不想合作:( (2认同)

Nac*_*cho 11

我使用Netbeans和XDebug.请在其网站上查看有关如何配置它的文档. http://php.netbeans.org/


Jan*_*sen 11

我使用Netbeans和XDebug以及Easy XDebug FireFox附加组件

在调试MVC项目时,附加组件是必不可少的,因为XDebug在Netbeans中运行的正常方式是通过url注册dbug会话.使用FireFox中安装的附加组件,您可以设置Netbeans项目属性 - >运行配置 - >高级并选择"不要打开Web浏览器"您现在可以设置断点并像往常一样使用Ctrl-F5启动调试会话.打开FireFox并右键单击右下角的Add-on图标以开始监视断点.当代码到达断点时,它将停止,您可以检查变量状态和调用堆栈.


Ken*_*Ken 10

如果您不想搞砸输出,输出缓冲非常有用.我这样做是一个单行程,我可以随意评论/取消评论

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
Run Code Online (Sandbox Code Playgroud)


Tob*_*len 9

PhpEdit有一个内置的调试器,但我通常最终使用echo(); 和print_r(); 老式的方式!!


Kar*_*rim 8

对于使用print_r/echo来计算的太麻烦的问题,我使用我的IDE(PhpEd)调试功能.与我使用的其他IDE不同,PhpEd几乎不需要设置.我不使用它,因为我遇到任何问题,唯一的原因是,它是痛苦的缓慢.我不确定缓慢是特定于PhpEd还是任何php调试器.PhpEd不是免费的,但我相信它使用了一个开源调试器(如前面提到的XDebug).再次,PhpEd的好处是它不需要我在过去发现真正相当繁琐的设置.

  • PHPEd调试器实际上是由编写PHPEd的同一个人编写的,我很确定它不是开源的.至少PHPEd不附带源代码,而是编译.so和.dll. (2认同)