PHP调试技术?

PHP调试技术?,php,Php,如何有效地调试PHP应用程序?我目前的方法是使用跟踪输出-例如:die(“message”),然后从那里修复应用程序。问题是,这通常是非常繁琐和低效的。我想这样做: define('DEBUG', true); debug({ print_r($arr); }); on_debug_die("application exit"); 但我知道PHP不支持这种语法。有人能帮我吗?您对debug()的使用很容易实现,除非我误解了它:只需将$arr作为参数传递,并在函数中打印它。你能解释一下on_

如何有效地调试PHP应用程序?我目前的方法是使用跟踪输出-例如:die(“message”),然后从那里修复应用程序。问题是,这通常是非常繁琐和低效的。我想这样做:

define('DEBUG', true);

debug({ print_r($arr); });

on_debug_die("application exit");
但我知道PHP不支持这种语法。有人能帮我吗?

您对debug()的使用很容易实现,除非我误解了它:只需将$arr作为参数传递,并在函数中打印它。你能解释一下on_debug_die()的行为吗?

为什么

function on_debug_die($msg) {
  if (defined('DEBUG')) die($msg);
}

on_debug_die(print_r($arr,1));
var_dump()函数可能存在问题,该函数更适用于数据挖掘,但它也是可以解决的


但是,使用die()将在第一次执行时停止程序的执行。因此,使用
trigger\u error()
而不是
die()
似乎更有用

对于此特定用途,您可以使用此函数:

function debug($val) {
    if (defined('DEBUG') && DEBUG) {
        echo '<pre>', var_dump($val), '</pre>';
        die();
    };
};
函数调试($val){
if(已定义('DEBUG')&&DEBUG){
echo“”,var_dump($val),“”;
define('DEBUG', "DEBUG"); //Comment this line when you are done debugging

function debug_out($input) {
    if (defined("DEBUG")) {
        print_r($input);
        die;
    }
}
模具(); }; };
这将检查
DEBUG
常量是否定义并计算为
true
,如果是,则将有效地停止脚本执行,并在此之前输出
$val
。您还可以考虑将一些值或重要步骤记录到一些文件中——许多PHP框架实现了类似的功能


这是你想要的吗有关调试的详细信息您可以在此处阅读:

您可以像这样使用它:

$log->debug($arr);
现在,无论何时需要调试,都可以调用
debug_out(“…”)


当然,更好的方法是使用调试工具(如XDebug)和支持它的IDE(如PhpStorm)。

使用合适的IDE。它改变了开发游戏:)

查看一个日志框架,如-然后您可以添加如下语句:

function debug() {
    if (!DEBUG) {
        return;
    }
    $args = get_func_args();
    // var_dump, log to file, whatever
}

并修改中心日志配置,以控制日志消息的实际打印级别(调试、信息、警告、错误等)。

您始终可以使用,例如,将其连接到真正的调试器

或者您可以定义一个函数,例如:

或者,您也可以从一开始就使用类型提示、对象和抛出异常来很好地构建应用程序,这些都会导致错误大部分自行报告。

为什么不使用PDT&Xdebug? 或PHPStorm(另一个不错的IDE,但值得一试)

使用EclipsePDT&XDebug或Zend调试器引擎,您将能够进行分步调试、检查变量并在PHP代码中设置断点(即使是远程的)

这是一种比跟踪更“现代”的应用程序调试方式。
跟踪是必要的,但对于日常开发来说绝对不是有效的。

在应用程序中混合调试代码会严重损害代码的可读性和性能。我可以建议您采取的最佳方法是,开始考虑单元测试(google)以及为什么不——您的特别代码使用die语句进行调试——这种测试永远不会变老。集成IDE调试也是一种选择(PhpEd、NetBean等,它们都具有这些奇特的特性)