让我们面对现实,debug_backtrace()输出不是很漂亮.有没有人编写包装器?
什么是你最喜欢的漂亮var_dump()(可用于商业项目,所以没有GPL(虽然LGPL是好的))
另请参阅:PHP中更漂亮/信息丰富的Var_dump替代方案?
六年 - 以及这个问题的一万次观点 - 后来,我仍在使用这个.它在屏幕上显得不错,就像Kint(非常棒).
它是纯文本,我可以通过自动错误报告发送给自己,并可以使用ChromePhp在浏览器的开发人员控制台中显示.
/**
* @brief Returns an HTML formatted string showing details of the backtrace
*
* Example:
*
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:48 e(373, 'beer', 'curry')
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:53 d(26366, 28255, 8364)
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:58 c()
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:63 b(1283, 15488, 29369)
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:72 a(788, 6077, 25010)
*/
function FormatBacktrace()
{
$result = '<h4>Backtrace</h4>';
foreach (debug_backtrace() as $trace)
{
if ($trace['function'] ==__FUNCTION__)
continue;
$parameters = is_array($trace['args']) ? implode(", ",$trace['args']) : "";
if (array_key_exists('class', $trace))
$result .= sprintf("%s:%s %s::%s(%s)<br>",
$trace['file'],
$trace['line'],
$trace['class'],
$trace['function'],
$parameters);
else
$result .= sprintf("%s:%s %s(%s)<br>",
$trace['file'],
$trace['line'],
$trace['function'],
$parameters);
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
你也有kint(github repo)composer在packagist存储库上有一个包
因此,无论是手动下载库还是使用composer,都只需要:
$ composer init
$ composer require raveren/kint
$ composer install
Run Code Online (Sandbox Code Playgroud)
然后,ini_set('display_errors', 'On');我更喜欢在我的main(第一个)包含文件中使用这个简单的处理程序:
if ( getenv('__project_env__') === 'DEV') {
error_reporting(E_ALL | E_STRICT);
function shutdown_handler() {
$error = error_get_last();
Kint::trace();
Kint::dump($error);
}
register_shutdown_function('shutdown_handler');
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
通过__project_env__在Apache的Virtualhost(SetEnv __project_env__ "DEV")中设置,以免污染git项目所在的存储库的不同分支与配置项本质environmental
以下是跟踪外观(每个步骤均可折叠)的屏幕截图:


它还提供了一些额外的var_dump()功能,例如语法着色:

编辑:
关于将Xdebug纳入商业项目.
该Xdebug的许可证只有几个术语,似乎很宽容.
Xdebug是C扩展.因此,在项目中重新分配它或部分它可能有点困难.根据您的要求,我看到几个选项:
这是我的漂亮的打印包装器,用于非浏览器输出,即错误日志或控制台:
function stackTrace() {
$stack = debug_backtrace();
$output = '';
$stackLen = count($stack);
for ($i = 1; $i < $stackLen; $i++) {
$entry = $stack[$i];
$func = $entry['function'] . '(';
$argsLen = count($entry['args']);
for ($j = 0; $j < $argsLen; $j++) {
$func .= $entry['args'][$j];
if ($j < $argsLen - 1) $func .= ', ';
}
$func .= ')';
$output .= $entry['file'] . ':' . $entry['line'] . ' - ' . $func . PHP_EOL;
}
return $output;
}
Run Code Online (Sandbox Code Playgroud)
jhurliman 上面漂亮的打印 stackTrace 方法真的很棒。但对我来说,它产生了大量的 PHP 警告,这些警告也使日志变得混乱。我添加了更多的错误和类型检查,这会在日志中产生一个非常好的堆栈跟踪。这是 jhurliman 代码的修改版本:
function stackTrace() {
$stack = debug_backtrace();
$output = '';
$stackLen = count($stack);
for ($i = 1; $i < $stackLen; $i++) {
$entry = $stack[$i];
$func = $entry['function'] . '(';
$argsLen = count($entry['args']);
for ($j = 0; $j < $argsLen; $j++) {
$my_entry = $entry['args'][$j];
if (is_string($my_entry)) {
$func .= $my_entry;
}
if ($j < $argsLen - 1) $func .= ', ';
}
$func .= ')';
$entry_file = 'NO_FILE';
if (array_key_exists('file', $entry)) {
$entry_file = $entry['file'];
}
$entry_line = 'NO_LINE';
if (array_key_exists('line', $entry)) {
$entry_line = $entry['line'];
}
$output .= $entry_file . ':' . $entry_line . ' - ' . $func . PHP_EOL;
}
return $output;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15882 次 |
| 最近记录: |