php - 有 pretty-print 堆栈转储吗?

标签 php debugging

让我们面对现实吧,debug_backtrace() 输出不是很漂亮。有人编写了包装器吗?

你最喜欢什么漂亮的var_dump()(它可以在商业项目中使用,所以没有GPL(尽管LGPL也可以))

另请参阅:A more pretty/informative Var_dump alternative in PHP?

<小时/>

六年后,这个问题被浏览了一万次,但我仍在使用这个。它在屏幕上看起来并不漂亮,例如 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;
}

最佳答案

您还有kint ( github repo ) 其中有一个 composer包上packagist存储库

因此,要么手动下载库,要么使用composer下载库。 ,这只是一个问题:

$ composer init
$ composer require raveren/kint
$ composer install

然后,代替 ini_set('display_errors', 'On'); ,我更喜欢在我的主(第一个)包含文件中使用这个简单的处理程序:

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 {
 ...
}

__project_env__在 Apache 的 Virtualhost ( SetEnv __project_env__ "DEV" ) 中设置,以免污染 git 的不同分支项目所在的存储库,其配置项本质上是 environmental

  • 在 DEV 中:我得到了调试
  • 在 PROD 中,默认情况下是静默的

以下是跟踪外观的屏幕截图(每个步骤都是可折叠的):

Kint stack trace
(来源:github.io)

关于php - 有 pretty-print 堆栈转储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4282120/

相关文章:

php - 解析错误: syntax error, unexpected '<<' (T_SL) in C:\xampp\htdocs\kensift\index.php on line 167 [duplicate]

javascript - 如何加载和处理服务器上的元数据?

javascript - 具有未知数量变量的 AJAX 帖子

php - 向数据库添加参数后,通过Postman POST数据时出现错误

android - 如何在 galaxy trend plus gt s 7580 上运行 eclipse 项目

.net - 从调试版本中检测发行版本的最佳方法? 。网

c++ - 比较应该相同的 C++ 程序运行的配置文件以检测分歧

android - 使用以太网在目标上启动 Android x86 镜像

PHP: simple_html_dom - 如何查找不在某个类中的元素?

c++ - 函数在 main 和 library 中调用不同的行为