【问题标题】:Providing suggested solutions in error messages在错误消息中提供建议的解决方案
【发布时间】:2009-11-26 04:07:21
【问题描述】:

开发者工具和软件通常不会在错误消息中提供解决方案建议。这对编译器来说是有意义的,因为他们应该准确地告诉他们出了什么问题。

“lint” 工具可以提供建议,但据我所知,很少有开发人员经常甚至根本不使用 lint 工具。

有大量面向开发人员的软件最好有一个“建议的解决方案”部分来显示错误消息。这是 Eclipse 等 IDE 所具有的强大功能之一。但是像 web 应用程序框架、标准/流行库等软件没有这个有用的功能。

这是否只是用户友好设计的不足(鉴于 Google 非常出色,可以认为这是不必要的)还是有充分的理由?您使用的任何编译器、框架、平台是否提供带有解决方案建议的错误消息,如果没有,为什么不提供?

【问题讨论】:

  • 我使用的所有工具都提供了“不要这样做!”的建议解决方案。每条错误消息,隐含地。

标签: frameworks compiler-warnings user-friendly


【解决方案1】:

你想看什么?

Error: Null Pointer Exception (suggested solution: Set the object to something).

我的意思是,教育你不是错误编写者的工作。我更喜欢指向确切问题的简单错误消息,因此我自己可以确定这次是什么原因造成的。对我来说,这肯定属于 3rd 方工具的范畴;也许编译器可以为他们提供广泛的上下文来进行分析,但这并不是我真正认为有价值的东西。

【讨论】:

  • “我的意思是,教育你不是错误编写者的工作。” - 同意!但我根本不是在谈论编译器——如果程序员无法弄清楚如何处理空指针异常消息,他应该首先学习语言或者不应该编程。我说的是框架、库等。所以我认为它本质上归结为堆栈跟踪和您提到的上下文信息,或者用户友好的文档和培训质量甚至流行度(谷歌搜索)。
  • 正如公认的答案所强调的那样,是的,这取决于框架编写者。但它甚至不适合“堆栈跟踪”;突出显示调用堆栈。在异常消息中,它可能指向某些东西,但是 MS 曾经这样做(我认为),它导致链接现在已经死了。也许不完全是,但我有模糊的记忆。
【解决方案2】:

我想要从编译器或运行时错误中获得的主要内容是上下文——它发生在哪里以及它在失败时从哪里调用。

我认为大多数现代编译器和运行时(Java、Ruby、Go)在这方面做得不错,您可以通过行号和堆栈跟踪找到大多数错误。即使 Javascript 选项越来越好,它也肯定优于旧的“alert()”调试方法。

将建议的解决方案留给 IDE 还不够公平吗?

但我确实同意,我看到的框架/库中错误消息非常稀疏,并且在您没有源代码的某些第三方库中的“NullPointerException at line 264”告诉您几乎没有.

如果这是一个问题,我认为它主要限于第三方库。 “好的理由”大概是它是在某人的空闲时间匆忙开发的,并且他们没有将有意义的错误消息放在优先级列表中。

【讨论】:

    【解决方案3】:

    出现错误的解决方案很难。有很多可能性,正如@silky 指出的那样,有些是无法诊断出来的。

    警告是另一种野兽。在许多情况下,现代编译器使用这些来表示“我认为你说 Y 时是指 X;你可能想检查一下。”

    【讨论】:

      【解决方案4】:

      一种编程语言有机会在用户界面方面具有最大的灵活性。你可以让电脑做任何你想做的事。硬币的另一面是,如果你打错了一个字符,它可能不知道你的错误是在哪个轴上或在哪里犯的。

      灵活性较低的系统为解决问题提供了更多机会。如果您在 Lisp 编译器中键入 (a b c) 并且它不知道 a 是什么,那么它与许多有效代码行非常接近,以至于它无法准确地建议一个修复。如果您在 COBOL 程序的开头拼错了“IDENTIFICATION DIVISION”,编译器会相对容易地发现错误并帮助您。大多数其他语言介于这两个极端之间。

      在他们的职业生涯中,程序员往往会从功能较弱且结构化程度更高的语言转向功能更强大且更灵活的语言。 (至少,这是我在 Javascript 成为如此热门的新手语言之前所看到的情况。)这意味着他们的纪律提高到能够使用提供强大功能的工具,而无需被告知要做什么。我使用过的可以告诉我要修复什么的环境往往是我不喜欢使用的环境。

      它与任何其他艺术没有什么不同。看看音乐家、画家、武术家、演员、作家或厨师,甚至是学习说西班牙语的人:当他们年轻且缺乏经验时,他们会被置于一个有很多结构的系统中,如果他们犯了错误有人可以很容易地纠正它们。随着他们变得更加熟练,他们需要并且想要的支持越来越少。当他们自己成为专家时,他们根本不需要任何支持,但硬币的另一面是你不能轻易指出对错。如果你的孩子在线条之外涂色,你可以解释这个问题,但如果毕加索或波洛克画得不好,你会怎么说?或者如果菲利普格拉斯把一张纸条放错了地方,或者李小龙把他的身体打得太厉害了?谁愿意以如此有限的艺术形式工作,以至于世俗的事情是不可能的?如果有人真的需要 COBOL 编译器,它们仍然存在,但花钱购买糟糕的画作的人远远多于大师级的按数字颜色打印。

      更直接地说,有一个网站ErrorHelp (nee bug.gd),可以让您输入错误消息并获得结果,它比 SO 旧,但 nobody uses it。我试过了。除非您所处的环境只有一个可能的答案,否则在建议解决方案字典中遇到的简单问题是行不通的,因此在任何创意领域都是完全失败的。

      【讨论】:

      • +1 表示 errorhelp.com 链接。这个想法确实很棒。但是有谷歌!!
      【解决方案5】:

      大多数 IDE 都有自己的编译器。这允许他们进行部分编译、代码重构和许多其他技巧。我发现错误消息和建议非常有用。仅仅因为编译器没有在命令行中调用,并不意味着它不是编译器。


      (来源:theeggeadventure.com

      【讨论】:

        猜你喜欢
        • 2011-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 2019-11-16
        • 1970-01-01
        • 2015-07-27
        相关资源
        最近更新 更多