Debug.Assert是否在发布模式下生成IL



当源代码中存在Debug.Assert()方法调用并且我在发布模式下编译时,编译器是否为Debug.Assert()生成IL,即使它没有被调用?

我们的一位开发人员最近添加了一个Assert,它显示了有关我们内部安全的信息。有人能看看发布模式IL并找出断言的文本吗?

不,Debug类的成员(具有ConditionalAttribute属性)不发出IL。MSDN上没有明确提及,但以下两个引号很好地暗示了这种行为,因此为了补充Roy的答案:

如果使用Debug类中的方法打印调试信息并使用断言检查您的逻辑,您可以使您的代码健壮而不影响您的性能和代码大小运输产品。

因此,没有大小差异意味着没有任何输出,

ConditionalAttribute属性应用于Debug的方法。支持ConditionalAttribute的编译器将忽略对以下对象的调用方法,除非将"DEBUG"定义为条件编译符号。请参阅编译器文档以确定ConditionalAttribute是受支持的,并且用于定义条件编译符号。

这意味着,在编译器级别,这些调用甚至不会被考虑(当未定义DEBUG时)。

默认情况下它不会,除非您定义了DEBUG符号(默认情况下,对于关闭的Release)。

若要进行验证,请打开"项目属性",然后在Visual Studio中选择"生成"窗格。它将显示复选框"定义DEBUG常量"。如果为"释放"打开,则断言将被激发;否则,他们不会。

最新更新