Skip to main content
 首页 » 编程设计

c#之如何在 C# 中进行异常处理和跟踪

2024年02月24日19txw1958

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

问题:

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

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

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

(我不太明白这些标准,我来自java世界,java有两种异常,check和unchecked exception。开发人员必须处理checked exception,并做日志记录。关于unchecked exception,可能还是做日志记录,但大多数时候我们只是扔掉它。但是到了 C#,我该怎么办?)

问题的问题:

  1. 列出您要为开发团队创建并遵循的规则,以及您执行规则以实现这些目标的方式。

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

请您参考如下方法:

正如您提到的,Java 有已检查和未检查的异常。对于已检查的异常,您必须声明您的方法抛出它,或者在方法中处理异常。 C# 没有该限制,您的方法不必声明它可能抛出的异常。

100% of methods in the entire application must have at least a standard exception handler, using try/catch/finally blocks; more complex methods must also have additional exception handling for specific exceptions

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


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

还有很好的措施Vexing exceptions .