【问题标题】:Returning an error code in Erlang在 Erlang 中返回错误代码
【发布时间】:2010-05-27 10:01:59
【问题描述】:

我正在编写一些 Erlang 代码,但我非常不确定是否应该让一切都快速失败。我发现快速失败的一个问题是,对于开发人员/用户而言,生成的异常毫无意义。知道我应该返回什么不会给出深奥且难以阅读的堆栈跟踪吗?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    我建议您使用 error_logger(3) 进行日志记录,并让开发人员查看幕后实际发生的情况。建议关注OTP principles,以便收集VM在进程崩溃时返回的所有数据。

    【讨论】:

    • error_logger 看起来不错。那么我应该从抛出异常的地方还是捕获它的地方调用它?它不会弄乱代码吗?
    • 你不需要调用任何东西。实际上没有必要这样做,因为您在程序启动时安装了记录器处理程序。
    • spawnlink.com 上有不错的文章,其中也有使用此类处理程序的示例。
    • 您还想要jkvor.com/log-roller。这是一个不错的日志记录模块,可用于通过浏览器收集/查看来自不同节点的日志。虽然我还没碰过。
    • 我在 Spawnlink 上搜索了“error_logger”,但没有一个结果
    【解决方案2】:

    我建议快速失败并学习如何阅读堆栈跟踪。

    【讨论】:

    • 这是否意味着所有必须监控系统的支持人员都应该学习如何阅读 Erlang 错误消息?
    • 当然,每个以诊断或解决问题为工作的人都需要学习必要的工具。这是否意味着 erlang 跟踪、Python 跟踪、C 核心转储、Java 跟踪或不同级别的详细知识。您可能需要一些特定技术的专家,以及许多了解基础知识并可以重定向到适当专家的通才。
    • 好的,谢谢。我没有意识到这是支持人员工作的一部分。我会让他们知道的。虽然我知道他们不会高兴,但这对我来说更好,因为目前他们总是在出现生产错误时来找我(大约每天 20 次)。
    • ejabberd 常见问题解答有一个常见错误消息列表:ejabberd.im/common-errors 在我学习 Erlang 之前我就发现它非常有用;我通常可以从该列表中收到的错误消息中找出关键词。
    【解决方案3】:

    Erlang 的基本原理是:

    让它崩溃!

    我发现避免所谓的防御性编程非常有用。 Erlang Programming Rules 页面中更详细地解释了这个概念:

    http://www.erlang.se/doc/programming_rules.shtml#HDR11

    此外,即使某些 Erlang 错误可能有点神秘,处理它们的好方法是trace!在 Erlang 中进行跟踪非常简单。看看这个快速参考:

    http://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/

    或者直接参考官方文档。

    【讨论】:

      【解决方案4】:

      由于 Erlang 是一种函数式语言,如果您倾向于编写 Pure functions,则通常很容易发现错误,因为给定一个参数的纯函数将始终返回相同的结果。因此,有了堆栈跟踪,一旦找到失败的函数,您就可以找出导致错误的原因。与命令式编程相反,您不需要花费大量时间调试代码,通常您甚至不需要调试器,搜索错误变成了有趣的游戏。 This文章很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-04
        • 2014-07-03
        • 1970-01-01
        • 2018-04-03
        • 2017-09-01
        • 1970-01-01
        • 2017-06-03
        • 2016-07-25
        相关资源
        最近更新 更多