有哪些资源可以说服开发人员Java堆栈跟踪值得记录

时间:2011-02-18 20:00:20

标签: java stack-trace

我刚刚进入新的代码库。在努力使应用程序在本地运行时,我注意到我只是在日志和控制台输出中出现错误的单行 - 没有堆栈跟踪。我开始搜索代码,我唯一能找到的是异常消息。同意“链接”例外:仅保留消息。我向项目的唯一开发人员提到了这一点,并询问这是否是一个有意的设计决定。答复部分是“我认为我们不会从[记录堆栈跟踪]中获得太多收益。”

从Java开发的多年开始,我知道堆栈跟踪的价值有多大:它们告诉您发生异常的哪一行,您可以跟踪到达目的地的方式。您阅读了堆栈跟踪和相关代码,这可能足以解决您遇到的80%(N.B:统计数据没有统计支持)。

我不是在寻找关于记录什么或何时记录的论点 - 这不是问题,而是在其他地方已经涵盖了。真的,这对我来说似乎是一件非常重要的事情,除了那个“strack trace显示错误在哪里”之外,我从未想过如何解释它。我希望我能快速找到 Effective Java 之类的引用,但到目前为止谷歌还没有发现任何内容。

有关权威,有说服力的消息来源的任何建议,说明为什么要注意堆栈痕迹?

3 个答案:

答案 0 :(得分:8)

在代码库中创建故意错误并让他跟踪它:-)。说真的,你有很好的论据,如果你可以证明它有多大帮助,以及在追踪错误时节省了多少时间。

答案 1 :(得分:3)

对于Java来说,Google's coding standard可能会被认为足够权威:

  

异常所有方法都必须声明   他们的非运行时异常   可能会抛出他们的投掷条款。如果   他们可能会扔几个,一定是   列出,虽然缩短列表   列出基类而不是全部   他们鼓励他们的孩子   信息不会丢失。在   特别是'抛出异常'应该   永远不会出现在任何方法上,除了   极端情况,例如方法   它们是如此通用以至于它们实际上可能   抛出任何异常。

     

同样,'catch(例外e)'   不应该在任何地方使用,因为它   可以捕获不应该的异常   被抓住,从而隐藏问题。该   正在捕获的确切异常   应该拼写出来。

     

出于类似的原因,空捕获   应避开街区(除了   测试代码的例外情况   预期),因为他们也可能隐藏   问题并使调试变得困难。   如果你知道异常可以   从来没有发生总是提高   带有消息的OntopiaRuntimeException   喜欢'“(不可能)”+ e',并通过   在捕获的异常中保存   堆栈跟踪。

答案 2 :(得分:0)

我发现正好在这个项目上使用的Apache Commons Logging有这些guidelines for logging exceptions指定“使用完整堆栈跟踪记录。”

我仍然希望找到一些非常坦率的说明这应该是默认行为,除非你有一个非常非常好的理由去做。详细了解为什么这是一个好主意会更好。