如何进行异常处理&跟踪C#

时间:2010-05-06 05:33:12

标签: c# exception-handling bug-tracking

我正在阅读一些C#书籍,并且进行了一些练习,不知道该怎么做,或者不确定这个问题是什么意思。

问题:

在为公司工作一段时间之后,您作为知识渊博的开发人员的技能得到认可,并且您将被赋予“监管”异常处理和跟踪的实施的任务,该源代码(C#)用于企业应用程序正在不断增量发展。产品架构师设定的两个目标是:

  1. 整个应用程序中100%的方法必须至少有一个标准的异常处理程序,使用try / catch / finally块;更复杂的方法还必须对特定异常进行额外的异常处理

  2. 在传统调试器不可用的情况下(例如,在登台和生产服务器上),所有控制流代码都可以选择编写“跟踪”信息,以帮助在运行时调试和检测应用程序。

  3. (我不太明白这些标准,我来自java世界,java有两种异常,检查和未经检查的异常。开发人员必须处理检查异常,并做日志。关于未经检查的异常,仍然可以记录,但是大多数时候我们只是抛出它。但是这里有C#,我该怎么办?)

    问题:

    1. 列出您要为开发团队制定的规则,以及实施这些目标的实施方式。

    2. 您如何确保所有现有代码都符合产品架构师指定的规则;特别是,哪些因素会影响您的工作规划,以确保所有现有代码符合要求?

2 个答案:

答案 0 :(得分:4)

正如您所提到的,Java已经检查并取消选中了异常。对于已检查的异常,您必须声明方法抛出它,或者在方法中处理异常。 C#没有这个限制,你的方法不必声明它可能抛出的异常。

  

整个应用程序中100%的方法必须至少有一个标准的异常处理程序,使用try / catch / finally块;更复杂的方法还必须对特定异常进行额外的异常处理

这似乎是一个愚蠢的要求。如果没有有意义的方法从异常中恢复并继续正常执行,那么理想情况下允许异常不受阻碍地冒泡堆栈。这样,当您记录异常时(在正常关闭之前或不那么优雅地关闭之前),您将拥有完整的堆栈跟踪,了解究竟是什么导致了异常。使用pokemon exception handling并过早记录异常是一个非常常见的错误(从我见过的代码中)(所以你知道发生了一些不好的事情,但不知道是什么代码触发了它。


您还应该查看this list of similar question以获得良好的异常处理实践的概述。

好的衡量标准Vexing exceptions

答案 1 :(得分:0)

定义应用程序体系结构后,应确定如何处理应用程序生成的异常。策略应该是满足所有安全性,隐私和性能要求。以下是异常处理策略的一般准则:

  • 除非可以添加某种值,否则不要捕获异常。换句话说,如果了解异常对用户,对您或应用程序没有用处,请不要抓住它。
  • 如果要重试操作,向异常添加相关信息,隐藏异常中包含的敏感信息或显示格式化信息,请捕获异常。
  • 通常,仅在应用程序边界处处理异常(例如逻辑层的顶部,层,服务的边界或UI层的顶部)。此外,将包含敏感信息的异常替换为包含可在当前边界外安全公开的信息的新异常。
  • 不要跨信任边界传播敏感信息。这是一个标准的安全考虑因素,但在处理异常信息时经常被忽略。相反,将包含敏感信息的异常替换为包含可在当前边界外安全公开的信息的新异常。
  • 使异常尽可能准确,并允许在引发异常时采取特定操作。有时这可能需要使用必需的属性编写自定义异常。
  • 向用户显示的错误消息应该是相关的,他们应该建议采取纠正措施。在大多数情况下,用户显示的错误消息绝不应包含敏感信息,例如堆栈跟踪或服务器名称。