如果未处理异常,则发出警告

时间:2011-12-06 19:06:23

标签: c# exception-handling try-catch

如果代码有可能抛出未包含在try/catch块中的异常,是否会产生警告的技术或第三方工具?

3 个答案:

答案 0 :(得分:3)

我建议您最好不要考虑为什么代码生成异常,而不是简单而不需要进一步考虑要求所有代码都包含在某些try / catch / finally或其他代码中。 (顺便说一句,如果这是可能的,那么让它消失将是微不足道的 - 开发人员可以将主入口点包装在try / catch中,而不再有警告)。

Code Contracts是一个不会完全按照您的要求执行操作的工具,但它可以帮助您在编译时通过编译时解释代码的运行时行为编译器警告。这将告诉您诸如客户端调用deferences返回值并且service方法可能返回null的情况。这是导致异常行为的根本,而不仅仅是要求你处理它们。在这种情况下,你有一个糟糕的编程假设 - 你不想捕获这个异常,你想通过防止它首先发生它来消除它。

我会保存处理您无法控制的外部因素的地方的异常处理(例如,当您的应用下载文件时用户拔下网线)。听起来好像你正在寻找C#没有的Java风格的检查异常。但是,如果您查看外部库的XML注释方法,您可以查看它们可能生成的异常,并处理这些特定情况。如果你只是为外部性做这件事(并使用代码合同来管理内部假设),那么额外花费的时间就不多了。

答案 1 :(得分:0)

有一个question with roughly the same problem。这是如何检测代码是否可能引发错误。我不确定这个问题是否算作一个骗局,看来你想要预先编译,收到警告

但是,对那里接受的问题的答案是:

  

按照我之前的回答,我设法创建了一个基本的   异常查找器。它使用基于反射的ILReader类,   可以在Haibo Luo的MSDN博客上找到。 (只需添加一个引用   项目。)

     

[...]

     

总而言之,该算法递归地枚举(深度优先)任何   通过读取CIL在指定的方法中调用的方法   说明(以及跟踪已访问的方法)。它   维护一个可以使用a抛出的集合列表   HashSet对象,最后返回。另外   维护一个局部变量数组和一个堆栈,以便保持   跟踪在它们之后不会立即抛出的异常   创建

如果您不介意在编译后进行代码分析,并且基于IL代码,您可以尝试使用该问题中发布的代码段Noldorin。

答案 2 :(得分:0)

随着Erik的回答(赞成他):

例外是提供一种通知系统发生异常的方法。它们不是为了让方法与调用代码进行通信而提供方便的方法。

如果你的方法有通过/失败的情况,那么他们应该返回一个布尔标志。如果它们稍微复杂一些,例如需要返回状态代码,那么你应该使用结构或类作为结果。

总结一下:如果你发现自己使用了很多自定义异常,那么你做错了。