【问题标题】:custom formatting of parameters in xdebug error messagesxdebug 错误消息中参数的自定义格式
【发布时间】:2015-02-20 16:48:59
【问题描述】:

我知道使用 Xdebug 您可以更改 xdebug.collect_params 设置,以便错误消息包含有关调用中使用的参数的更多信息。 (有一个很好的解释here

但是,我的对象的字符串表示非常大且不可读。

我已经有一些好的 toString 实现,它只返回一个唯一的 id,所以如果我可以让 xdebug 使用 __toString() 而不是完整的序列化,那就太好了。

这(或任何其他自定义参数格式)是否可能?

我想理论上我可以尝试通过__sleep() 实现自定义表示,但我实际上需要默认的序列化机制来跨请求保存对象。

【问题讨论】:

  • 旁注:在 php 5.6 中添加了 __debugInfo 方法。我真的不知道,但如果 xdebug 使用 var_dump() 那么你可以将你的 __toString() 逻辑移动到 __debugInfo()
  • 是的,看来这正是解决方案。在最新版本的 xdebug 中实现了对 __debugInfo 的支持。现在我只需要等待 PHP 5.6 的 WAMP 更新;)相关:stackoverflow.com/questions/26835450/…

标签: php debugging serialization formatting xdebug


【解决方案1】:

有些工具提供了一种直观的交互方式来显示异常和堆栈跟踪。因此,您可以获得所有必要的详细信息,并且仍然拥有整洁的 UI。考虑以下几点:

在调试时,您通常需要尽可能多的(有用的)信息,因此不要删除(目前)不必要的信息,而是尝试使用默认隐藏信息的库,但确保它在你需要的时候就在那里。


* Symfony 异常处理程序似乎能够独立工作(从 composer.json 判断,Symfony 没有其他依赖项,尽管我还没有尝试过)。文档说:

ExceptionHandler 类捕获未捕获的 PHP 异常并将它们转换为良好的 PHP 响应。在调试模式下,将默认的 PHP/XDebug 输出替换为更漂亮、更有用的东西是很有用的。

【讨论】:

  • 这看起来很不错,虽然我的 IDE 依赖 Xdebug 来进行调试工作。不确定将它们一起使用是否明智?
  • 哦,在演示中我没有看到有关所使用参数值的任何信息?
  • 诚然,我之前没有使用过Whoops,它似乎无法跟踪传递的参数。但是,我一直在项目中使用 NetteDebug 和 Symfony\Debug,并且都支持显示传递的参数。我已经用新链接更新了帖子。
  • 谢谢,这是一个很好的清单。有一天它可能会派上用场,但现在我真的在寻找使用 xdebug 的解决方案。似乎 __debugInfo 是答案
  • 碰巧我遇到了League 项目,它有一组不错的包,包括一个名为BooBoo 的错误处理程序。这是一个相当年轻的项目,还没有包含pretty error page formatter,但是该项目为自定义错误输出提供了坚实的 OOP 基础。我没有将它添加到列表中,因为它还没有提供“显示异常的直观和交互方式”。
【解决方案2】:

正如上面评论中指出的:

PHP 5.6 支持__debugInfo()。此方法的patch 已于 2014 年 12 月提交到 xdebug 存储库,应该很快就会发布。

另见:How to get __debugInfo to work with XDebug?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2014-12-09
    相关资源
    最近更新 更多