Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有哪些资源可以让开发人员相信Java堆栈跟踪值得记录_Java_Stack Trace - Fatal编程技术网

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

有哪些资源可以让开发人员相信Java堆栈跟踪值得记录,java,stack-trace,Java,Stack Trace,我刚进入一个新的代码库。在努力使应用程序在本地运行时,我注意到我只得到了日志和控制台输出中错误的一行代码——没有堆栈跟踪。我开始搜索代码,唯一能找到的就是异常消息。“链接”例外情况同上:只有消息被保留。我向项目的唯一开发者提到了这一点,并询问这是否是一个有意的设计决定。部分回答是,“我认为我们不会从[记录堆栈跟踪]中获得太多好处。” 通过多年的Java开发,我知道堆栈跟踪是多么有价值:它们告诉您异常发生在哪一行,您可以跟踪您是如何到达那里的。您阅读了堆栈跟踪和相关代码,这可能足以解决您遇到的80

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

通过多年的Java开发,我知道堆栈跟踪是多么有价值:它们告诉您异常发生在哪一行,您可以跟踪您是如何到达那里的。您阅读了堆栈跟踪和相关代码,这可能足以解决您遇到的80%(注意:statistic没有统计支持)的错误

我不是在寻找关于记录什么或什么时候记录的争论——这不是问题所在,其他地方也讨论过。真的,这对我来说似乎是一件非常基本的事情,除了“strack traces告诉你错误在哪里”之外,我从来没有想过如何解释它。我希望我能很快找到有效Java之类的引用,但谷歌迄今为止还没有找到任何东西


关于为什么要注意堆栈跟踪的描述,有没有权威的、令人信服的来源的建议?

在代码库中创建一个故意错误,并让他跟踪到:-)。说真的,如果你能证明它在追踪bug时有多大帮助和节省了多少时间,你的论点就很有说服力了。

也许Java的s会被认为是足够权威的:

所有方法都必须声明异常 它们创建的非运行时异常 可以加入他们的条款。如果 他们可能会扔几个,所有的都是 列出,但将列表缩短了 列出基类而不是所有 他们的孩子受到鼓励,但条件是 信息不会丢失。在里面 特别是,“抛出异常”应该 绝不在任何方法上出现,除非在 极端情况,如 是如此的普遍以至于他们实际上可能 抛出任何异常

类似地,“catch(例外情况e)”是 不应在任何地方使用,因为 可能捕获不应该捕获的异常 被抓住从而隐藏问题。这个 正在捕获的确切异常 应该改为详细说明

出于类似的原因,空捕获 应避免使用砌块(除非在 测试异常所在的代码 预期),因为它们也可能隐藏 这些问题使调试变得困难。 如果您知道异常可以 永远不会发生总是提出一个问题 带有消息的OntopiaRuntimeException 比如“'(不可能)”+e',和pass 在捕获的异常中保存 堆栈跟踪。


我发现碰巧在这个项目中使用的ApacheCommons日志记录具有指定“使用完整堆栈跟踪记录”的日志记录


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

我不认为这实际上是一个谷歌项目(ontopia.net有相同的徽标,我找不到谷歌品牌)。但我绝对同意这种看法。真的,你能让他们看到光明的唯一方法就是让他们在黑暗中呆一会儿。当然,如果这是一个逻辑类比的话。有时第一手经验是最好的资源。幸运的是,在大多数情况下,故意错误是不必要的。大多数代码库已经有足够多的代码,而不会受到破坏。