将Trace.Assert
和Debug.Assert
语句保留在“稳定”且已移至测试和生产环境的代码中是否明智?
如果是这样,这些断言语句如何帮助?是否足以让Guard类等检查异常情况并根据需要引发异常?
答案 0 :(得分:8)
Debug.Assert语句将被忽略,默认情况下,当您在“debug”配置中编译而不是在“release”配置中时,会发生这种情况。实际上,Debug类只打算在测试环境中使用,在那里你应该捕获所有(或至少大多数)会导致Debug.Assert失败的错误。
Trace.Assert的工作方式相同,只是必须存在的编译常量是TRACE,默认情况下存在于“debug”和“release”配置中。在发布代码中使用跟踪断言可能是有意义的,但通常最好让它们执行除方法的默认行为之外的其他操作(它只显示带有堆栈跟踪的消息框)。您可以通过为Trace类配置自定义跟踪侦听器来实现此目的;有关详细信息,请参阅方法文档。
答案 1 :(得分:4)
转向Prod环境是一个开始,而不是程序生命的终结。 一旦它满足真实用户和现实世界,您将开始获得大量反馈 你没有预料到的问题和需求。 这意味着,发展才刚刚开始。 你需要你的断言来帮助你及早发现破碎的假设(之前 他们提出了很多问题,并帮助你扩展和改变你的计划。
答案 2 :(得分:2)
Assert优于异常的一个优点是您可能不会在出现问题的地方捕获异常。但Assert总是发生在正确的地方。
答案 3 :(得分:1)
我可以想到Assert的另一个好处是它可以帮助您在生产环境中进行调试。可以使用适当的工具(例如DbgView)在运行时动态捕获在发布代码中仍处于活动状态的断言。在产品发布后,这非常便于调试。
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx