User interface 何时*我们在生产系统上显示堆栈跟踪
在什么特定情况下,可以(甚至建议)向最终用户提供生产系统上用户界面的StackTrace 有大量的网站和文章,人们问他们是否应该向最终用户显示StackTraces。毫不奇怪,答案是响亮的“不!” 例如:User interface 何时*我们在生产系统上显示堆栈跟踪,user-interface,exception-handling,stack-trace,User Interface,Exception Handling,Stack Trace,在什么特定情况下,可以(甚至建议)向最终用户提供生产系统上用户界面的StackTrace 有大量的网站和文章,人们问他们是否应该向最终用户显示StackTraces。毫不奇怪,答案是响亮的“不!” 例如: 然而,我最近与另一位开发人员进行了一次对话,我花了大量时间来说明为什么stacktraces不应该通过UI传递给用户。那个讨论让我回到过去,重新审视了我的一个基本(绝对)租户——用户永远不会在生产中看到原始堆栈跟踪 我找不到一个令人信服的理由。然而,我确信存在有效的用例,我想要么理
我找不到一个令人信服的理由。然而,我确信存在有效的用例,我想要么理解它,要么舒服地继续抓住我的绝对租户 在这里,我的办公室里有许多不同的内部项目,我从其他部门的同事在我的程序崩溃时看到的堆栈跟踪中获益匪浅。他们只是没有恶意或足够的知识来知道发生了什么,否则他们会和我一起工作。这也给了我一个窗口期来询问用户,以确定他们在做什么(而这在他们的头脑中仍然是新鲜的)。如果堆栈跟踪被禁止,或者其他漂亮(但隐藏)的错误处理已经到位,那么除了通过堆栈跟踪之外,我可能不知道错误是如何发生的。你不知道——它们对用户根本没有帮助
用户收到消息。开发人员可以在日志、电子邮件、队列中获得堆栈跟踪,在本地/内部运行时,可能会在呈现的HTML中获得堆栈跟踪。在开源项目中,或者在调试模式已打开的情况下。可能用户正在使用该应用程序来了解该技术如何制作类似的应用程序,也可能他们计划自己为其贡献力量
有许多不同类型的用户。我认为允许他们打开这个选项是很好的,但是如果你的普通员工偶然打开stacktraces,那就不那么容易了 当应用程序崩溃时,堆栈跟踪应该对用户可用,因为堆栈跟踪通常会识别导致崩溃的错误,并且可能有解决方法可用。显然,只有当崩溃是由工作环境所针对的bug引起时,工作环境才能起作用,否则尝试工作环境只是浪费时间 崩溃也可能是由用户需要更新的内容中的错误引起的,例如图形驱动程序。在这种情况下,堆栈跟踪通常包含图形驱动程序的名称,例如atiumdag.dll 让我们想象一下: 无堆栈跟踪: 顾客:我收到一个信息框,上面写着“程序停止工作了” 支持:试试这个 顾客:不,没用 支持:试试这个 顾客:不,没用 支持:试试这个 顾客:不,没用 支持:试试这个 顾客:不,没用 使用堆栈跟踪: 顾客:我收到一个信息框,上面写着“程序停止工作了” 支持:单击“详细信息”按钮并向我发送堆栈跟踪 客户:(发送堆栈跟踪)
支持:这是由应用程序中的已知错误引起的,当应用程序安装在非默认路径中时,功能X会触发该错误。它将在明年发布的下一个版本中修复。但是,您可以通过禁用功能X或在默认安装路径中重新安装应用程序来解决此问题。FTFY:Customer:我收到一个消息框,上面写着“程序停止工作”。支持:单击“详细信息”按钮并向我发送错误id。客户:(发送错误id)支持:(根据错误id查找堆栈跟踪,而不泄漏敏感信息)这是由应用程序中的已知错误引起的,当应用程序安装在非默认路径中时,功能X会触发该错误。它将在明年发布的下一个版本中修复。但是,您可以通过禁用功能X或在默认安装路径中重新安装应用程序来解决此问题。