我应该打印异常堆栈跟踪吗?

3

获取异常的堆栈跟踪有多低效?我知道它很昂贵,但有多昂贵?在生产环境中,它们一定不应该被使用吗?

5个回答

13
在生产环境中,记录堆栈跟踪非常有帮助,这样用户在联系技术支持时可以找到它。应避免使用堆栈跟踪代替可理解(对于典型用户而言)的消息。
不应关注异常代码块的效率。错误恢复才是最重要的事情。

5
除此之外,在公共站点上分享堆栈跟踪信息可能会带来安全风险。 - Mitchel Sellers

5

如果异常出现在你的关键路径上,那么你已经面临性能问题。获取堆栈跟踪以追踪异常是至关重要的,我个人认为。


5

我的问题是,当出现意外情况时,为什么您要关注性能?此时,您的应用程序的健全性受到质疑,因此快速性无关紧要。


2
所以,正如你所说,这些是问题而不是答案。这会成为对问题本身的良好评论,但绝对不是答案。 - mbx
1
@mbx,修辞性的“问题”确实可以成为答案。你不应该被语法所迷惑而混淆内容。认为关心异常情况的性能是愚蠢的建议是正确的。 - Kirk Woll
@KirkWoll 有些修辞性问题确实可以成为答案的一部分,但是一个全面的答案需要更多的解释。 - mbx

1

在生产环境中,对于公共面向的网站,我绝不会将堆栈跟踪信息打印给用户。根据遇到的错误类型,堆栈跟踪可能包含可以泄露安全信息(如数据库名称等)的信息。

同样的规则也适用于错误消息。


0
通常我只在知道错误可能发生在与其他部分或系统密切相关的系统部分时才打印或保存堆栈跟踪。这对于负责集成的部分尤其如此,因为错误可能是间歇性的,并且严重依赖于环境状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接