4

在“稳定”且已移入测试和生产环境的代码中保留Trace.Assert和声明是否明智?Debug.Assert

如果是这样,这些断言语句有什么帮助?让 Guard 类等检查异常条件并酌情引发异常还不够吗?

4

4 回答 4

8

除非您定义了 DEBUG 编译常量,否则Debug.Assert语句将被忽略,默认情况下,当您在“调试”配置而不是“发布”配置中编译时会发生这种情况。实际上,Debug 类只用于测试环境,您应该在测试环境中捕获所有(或至少大部分)会导致 Debug.Assert 失败的错误。

Trace.Assert的工作方式相同,除了必须存在的编译常量是 TRACE,它默认存在于“调试”和“发布”配置中。在发布代码中使用跟踪断言可能是有意义的,但通常最好让它们做一些除了方法的默认行为之外的事情(它只显示一个带有堆栈跟踪的消息框)。您可以通过为 Trace 类配置自定义跟踪侦听器来实现此目的;有关更多详细信息,请参阅方法文档。

于 2009-11-30T10:35:35.223 回答
4

迁移到 Prod 环境是程序生命的开始,而不是结束。一旦它遇到了真实的用户和现实世界,你就会开始得到很多关于你没有预料到的问题和需求的反馈。这意味着,开发才刚刚开始。你需要你的断言来帮助你及早发现错误的假设(在它们产生很多问题之前)并帮助你扩展和改变你的程序。

于 2009-11-30T11:15:44.363 回答
2

Assert 优于异常的优点之一是您可能不会在问题发生的地方捕获异常。但是 Assert 总是发生在正确的地方。

于 2009-11-30T11:05:01.750 回答
1

我能想到的 Assert 的另一个好处是它可以帮助您在生产环境中进行调试。在发布代码中仍处于活动状态的断言可以在运行时使用适当的工具(例如DbgView )动态捕获。这对于您的产品发布后的调试非常方便。

http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

于 2009-11-30T11:11:02.713 回答