开发人员工具和软件通常不会在错误消息中提供解决方案建议。这对于编译器是有意义的,因为它们应该告诉准确出了什么问题。
有“lint”工具提供建议,但AFAIK,很少有开发人员定期使用lint工具,甚至根本没有。
有一大堆面向开发人员的软件可以很好地将“建议的解决方案”作为错误消息的一部分。这是像Eclipse这样的IDE的强大功能之一。但是像Web应用程序框架,标准/流行库等软件没有这个有用的功能。
这是否缺乏用户友好型设计(考虑到谷歌是如此优秀,可以认为这是不必要的)还是有充分的理由呢?您使用的任何编译器,框架和平台是否都会提供带有解决方案建议的错误消息,如果没有,为什么不呢?
答案 0 :(得分:4)
你想看到什么?
Error: Null Pointer Exception (suggested solution: Set the object to something).
我的意思是,教育你并不是错误的作家工作。我更喜欢指向确切问题的简单错误消息,所以我自己可以确定这次导致它的原因。对我而言,这肯定属于第三方工具领域;或许编译器可以为他们提供广泛的背景,进行他们的分析,但这不是我真正觉得有价值的东西。
答案 1 :(得分:1)
我想从编译器或运行时错误中获取的主要内容是上下文 - 它发生在哪里以及从失败时调用的位置。
我认为大多数现代编译器和运行时(Java,Ruby,Go)在那里做得不错,使用行号和堆栈跟踪可以找到大多数错误。即使Javascript选项变得很好,它肯定胜过旧的“alert()”调试方法。
将建议的解决方案留给IDE是否公平?
但我确实同意我已经看到了非常稀疏的错误消息的框架/库,以及某些第三方库深处的“第264行的NullPointerException”,你没有源代码告诉你非常接近于什么
如果这是一个问题,我认为它主要限于第三方库。 “好理由”可能是因为它是在某人的业余时间匆忙开发的,并且他们没有在优先级列表上放置非常高的有意义的错误消息。
答案 2 :(得分:1)
解决方案很难呈现错误。有很多可能性,正如@silky指出的那样,有些无法被诊断出来。
警告是一种不同的野兽。在许多情况下,现代编译器使用这些来说“当你说Y时,我认为你的意思是X;你可能想检查一下。”
答案 3 :(得分:1)
编程语言有机会在用户界面方面具有最大的灵活性。你可以让电脑做你想做的任何事情。硬币的另一面是,如果你输入的字符多于一个字符错误,它可能不知道你的错误在哪个轴上,或者在哪里。
灵活性较低的系统为解决问题提供了更多机会。如果你输入(a b c)你的Lisp编译器并且它不知道它是什么,它就如此接近这么多有效的代码行,它不能完全建议一个单独的修复。如果在COBOL程序开始时拼错“IDENTIFICATION DIVISION”,编译器可以相对容易地发现错误并帮助您解决问题。大多数其他语言介于这两个极端之间。
程序员倾向于在职业生涯中将功能较弱且结构化程度较高的语言转变为功能更强大,更灵活的语言。 (至少,这就是我在Javascript成为如此热门的新手语言之前所看到的。)这意味着他们的学科已经提升到能够使用工具提供能力而牺牲被告知该做什么的程度。我使用的环境可以告诉我要修复的内容,往往是那些我不喜欢使用的环境。
这与其他任何艺术都没有什么不同。看看音乐家或画家或武术家或演员或作家或厨师,甚至是学习说西班牙语的人:当他们年轻且缺乏经验时,他们会被置于一个有很多结构的系统中,如果他们犯了错误有人可以很容易地纠正它们。随着他们变得更加熟练,他们需要并且需要越来越少的支持。当他们自己成为专家时,他们根本不需要任何支持,但硬币的另一面是,你不能轻易指出什么是对或错。如果你的孩子在线外颜色,你可以解释这个问题,但如果毕加索或波洛克做了一个糟糕的笔触,你会说什么?或者,如果菲利普·格拉斯把一张纸条放在一边,或者李小龙把他的身体转得太远了?谁会想要以一种如此有限的艺术形式工作,以至于亵渎的事情是不可能的? COBOL编译器仍然存在,如果有人真的想要它们,但是更多人为可怕的绘画付钱而不是精巧的逐个数字打印。
更直接地说,有一个网站ErrorHelp(nee bug.gd),它允许您输入错误消息并获得结果,并且它比SO早nobody uses it。我试过了。除非您处于只有一个可能答案的环境中,否则建议解决方案字典遇到的简单问题不起作用,因此在任何创意领域都会出现完全失败。
答案 4 :(得分:0)
大多数IDE都有自己的编译器。这允许他们进行部分编译,代码重构和许多其他技巧。我发现错误消息和建议非常有用。仅仅因为没有在命令行上调用编译器,并不意味着它不是编译器。
alt text http://www.theeggeadventure.com/wikimedia/images/1/1f/Eclipse-error.png