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