何时在生产系统上显示堆栈跟踪信息?

7
在生产系统中向最终用户呈现StackTrace的特定情况是什么(甚至建议)?
有大量的网站和SO文章询问是否应向最终用户显示StackTrace。毫不奇怪,答案是“不!”。
例如: 然而,最近我与另一位开发人员进行了一次对话,在这次对话中,我花费了很多时间来阐述为什么不应该通过UI将堆栈跟踪传递给用户。这个讨论让我回顾了我的一个基本原则 - 用户在生产环境中永远不应该看到原始的堆栈跟踪
我找不到一个有说服力的理由。然而,我确定存在有效的用例,并且我想要了解它,或者感到自己可以继续坚持我的绝对原则。
4个回答

11

您不需要了解它们——因为它们对用户没有任何帮助。

用户会接收到消息。开发人员会得到堆栈跟踪信息,可以在日志、电子邮件、队列、本地/内部运行时渲染的 HTML 等位置中查看。


2
当应用程序崩溃时,用户应能够查看堆栈跟踪,因为堆栈跟踪通常可以识别导致崩溃的错误,并且可能有可行的解决方法。需要注意的是,如果崩溃不是由特定错误引起,那么尝试解决该错误是浪费时间。
崩溃也可能由用户需要更新的某些内容中的错误引起,例如图形驱动程序。在这种情况下,堆栈跟踪通常包含图形驱动程序的名称,例如 atiumdag.dll。
让我们想象一下:
没有堆栈跟踪:
客户:我收到一个消息框,显示“程序停止工作”。
支持:请尝试此操作。
客户:不,没有帮助。
支持:请尝试此操作。
客户:不,没有帮助。
支持:请尝试此操作。
客户:不,没有帮助。
支持:请尝试此操作。
客户:不,没有帮助。
有堆栈跟踪:
客户:我收到一个消息框,显示“程序停止工作”。
支持:单击“详细信息”按钮并将堆栈跟踪发送给我。
客户:(发送堆栈跟踪)
支持:这是应用程序中已知的错误引起的,当应用程序安装在非默认路径时,该错误会被功能X触发。它将在下一个版本中修复,该版本将于明年发布。但是,您可以通过禁用功能X或在默认安装路径中重新安装应用程序来解决此问题。

1
FTFY:客户:我收到一个消息框,上面写着“程序停止工作”。 支持:请点击“详细信息”按钮并将错误ID发送给我。 客户:(发送错误ID) 支持:*(根据错误ID查找堆栈跟踪,不泄露敏感信息)* 这是应用程序中已知的一个错误,当应用程序安装在非默认路径时会触发功能X。它将在明年发布的下一个版本中得到修复。但是,您可以通过禁用功能X或将应用程序重新安装到默认安装路径来解决此问题。 - törzsmókus

2

在我的办公室里,有许多不同的内部项目,当我的程序崩溃时,我可以看到其他部门的同事所看到的堆栈跟踪。他们并不是恶意的或者知识丰富到了解发生了什么,否则他们会和我一起工作。这也给了我一个时间窗口去询问用户,也许能够确定他们正在做什么(当他们还记得的时候)。如果堆栈跟踪被抑制了或者其他美观的(但隐蔽的)错误处理已经就位,那么我可能不会知道错误是如何发生的,除非通过堆栈跟踪。


1
在开源项目中或者你打开了调试模式。也许用户正在使用应用程序学习技术如何工作,以制作类似的应用程序,或者他们计划自己贡献于其中。
有许多不同类型的用户。我认为允许他们打开这个选项很好,但不应该太容易让普通用户可能会意外打开stacktraces。

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