当#if DEBUG运行时
我在C#类中有这个代码。
#if DEBUG private const string BASE_URL = "http://www.a.com/"; #else private const string BASE_URL = "http://www.b.com//"; #endif
我想问的是什么时候
#if DEBUG
代码中的路径被执行了吗?
它会被执行吗?
- 当我在Visual Studio中运行调试会话时?
- 当我从调试文件夹手动运行有问题的exe或dll时?
- 我忘记提及的任何其他情况?
#if DEBUG
这是一个预处理器定义。
它在您定义DEBUG常量时编译。 是的,它是Debug Build Configuration的默认设置。
Visual Studio 2010项目属性:
如果选中Define DEBUG constant
,VS将编译:
private const string BASE_URL = "http://www.a.com/";
否则(未选中)VS将编译:
private const string BASE_URL = "http://www.b.com//";
这是一个预处理器指令。 执行调试构建时会编译DEBUG部分中的代码(更具体地说,在定义DEBUG常量时)。 即如果你进行调试构建,BASE_URL将指向www.a.com。 否则它将指向www.b.com。
使用DEBUG指令编译时。 因此,如果设置它,则只有第一行将是已编译二进制文件的一部分,如果未设置,则第二行将成为二进制文件的一部分。
在VS中编译调试配置时默认设置DEBUG,但您可以手动为任何配置设置DEBUG
这是一个“编译器指令”,这意味着它实际上将根据您输入的#if包括或排除构建过程(或编译)中的代码。也就是说,DEBUG符号位于项目的属性中,在Visual Studio中通常会在“Release”版本中自动删除。
所以基本上,它不必在Visual Studio中运行调试,并且它不必在任何特定文件夹中,您的代码就是以这种方式构建的。
如果使用DEBUG配置进行编译,则else行之前的代码将被编译而另一行则不会。 如果您在任何其他配置中进行编译,则第二行将被编译,而第一行则不会。
VS 2017实际上感知了活动配置,例如,如果选择了发布配置,则会使调试条件变灰 。
转到应用程序的“项目属性” – >“构建”选项卡。 如果配置:活动(调试),则启用调试配置。 下面的代码将打印到控制台。
#if DEBUG Console.WriteLine("in debug mode..."); #endif
如果配置:活动(释放),则启用发布配置。下面的代码将打印到控制台。
#if RELEASE Console.WriteLine("in release mode..."); #endif
如果你想在DEBUG和RELEASE模式之间切换,请使用工具菜单下的“调试/发布/配置管理器”下拉菜单。大多数开发人员都知道这种情况…但有时会被忽略并导致混淆为什么上面的代码是运行不正常。