Mat*_*att 20 .net c# debugging assert visual-studio
请看以下示例:
public void Foo()
{
//Code...
Debug.Assert(ExpensiveTest());
//Code...
}
Run Code Online (Sandbox Code Playgroud)
Debug.Assert在发布模式下编译时,该方法会发生什么?会ExpensiveTest()继续吗?如果没有,那么它是如何工作的(因为它不是一个可以设置为无评估的宏)?如果它确实运行,那么这是否会破坏调试断言的目的?
Jon*_*eet 30
在发布模式下编译时,Debug.Assert方法会发生什么?
它被完全删除(包括调用ExpensiveTest),假设您没有DEBUG在发布配置中定义的条件编译符号.
如果查看文档,声明使用[ConditionalAttribute("DEBUG")]:
[ConditionalAttribute("DEBUG")]
public static void Assert(
bool condition
)
Run Code Online (Sandbox Code Playgroud)
ConditionalAttribute用于条件编译.有关详细信息,请参阅Bart de Smet关于条件编译的博客文章,以及C#4规范的第17.4.2节.
根据Debug.Assert Method (Boolean) Debug方法仅在调试版本中编译。
因此,如果您构建了正确的发布版本(Debug/Configuration Manager有关详细信息,请参阅菜单项),此方法调用将被删除。
在Visual Basic和Visual C#中,您可以使用System.Diagnostics命名空间中的Debug或Trace中的Assert方法. 调试类方法不包含在程序的发行版中,因此它们不会增加大小或降低发布代码的速度.
也来自同一个链接:
请注意,在创建代码的发行版时,对Debug.Assert方法的调用将消失.这意味着检查余额的调用在Release版本中消失.要解决此问题,您应该将Debug.Assert替换为Trace.Assert,它不会在Release版本中消失
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |