【发布时间】:2017-08-15 11:42:41
【问题描述】:
我尝试在 C# 中使用简单的预处理器指令进行调试和发布模式。
例如:
using System;
public class C {
public void M() {
#if DEBUG
Console.WriteLine("Debug");
#else
Console.WriteLine("Release");
#endif
}
}
这段代码非常简单明了。
但是当我查看 IL 代码时,我没有任何关于调试指令的信息。
.class private auto ansi '<Module>'
{
} // end of class <Module>
.class public auto ansi beforefieldinit C
extends [mscorlib]System.Object
{
// Methods
.method public hidebysig
instance void M () cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Release"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method C::M
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
// Method begins at RVA 0x205e
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: nop
IL_0007: ret
} // end of method C::.ctor
} // end of class C
这对我来说很有趣,为什么会这样。
我的意思是为什么我在 IL 代码中看不到任何关于 DEBUG 模式的信息?
附:我使用 sharplab 查看 IL 代码。
P.S.2 直播example
【问题讨论】:
-
您是否查看了用于调试配置的 IL?
-
@GalacticCowboy 不,我在寻找 DEBUG 配置
-
您展示的是 Release IL。 Debug IL 看起来不一样。
-
@TarasKovalenko 使用 Visual Studio 和 msbuild 进行调试时会发生 2 件不同的事情:1. 设置了 DEBUG 变量,2. 告诉编译器优化代码....也许是该 sharplab 示例没有设置
DEBUG标志
标签: c# .net .net-core .net-assembly