当#if DEBUG运行时

时间:2012-10-18 17:46:42

标签: c# .net

我在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

代码中的路径被执行了吗?

是否会被执行

  1. 当我在Visual Studio中运行调试会话时?
  2. 当我从调试文件夹手动运行有问题的exe或dll时?
  3. 我忘记提及的任何其他情况?

7 个答案:

答案 0 :(得分:47)

#if DEBUG这是预处理器的定义。

在定义DEBUG常量时进行编译。是的,它是Debug Build Configuration的默认设置。

Visual Studio 2010项目属性: Visual Studio 2010 Project Properties

如果选中Define DEBUG constant,VS将编译:

private const string BASE_URL = "http://www.a.com/";

否则(未选中)VS将编译:

private const string BASE_URL = "http://www.b.com//";

答案 1 :(得分:13)

这是一个预处理器指令。执行调试构建时会编译DEBUG部分中的代码(更具体地说,在定义DEBUG常量时)。即如果您进行调试构建,BASE_URL将指向www.a.com。否则它将指向www.b.com。

答案 2 :(得分:8)

使用DEBUG指令编译时。因此,如果设置它,则只有第一行将是已编译二进制文件的一部分,如果未设置,则第二行将成为二进制文件的一部分。

默认情况下,在VS中编译调试配置时会设置DEBUG,但您可以手动为任何配置设置DEBUG

答案 3 :(得分:5)

VS 2017实际上感知了活动配置,例如,如果选择了发布配置,灰显调试条件。

enter image description here

答案 4 :(得分:3)

这是一个"编译器指令",这意味着它实际上会根据你输入的#if包括或排除构建过程(或编译)中的代码。这就是说,DEBUG符号位于项目的属性中,并且在Visual Studio中通常会自动删除" Release"建立。

所以基本上,它不必在Visual Studio中运行调试,它不必在任何特定的文件夹中,你的代码就是这样构建的。

答案 5 :(得分:2)

如果使用DEBUG配置进行编译,则else行之前的代码将被编译而另一行则不会。如果你在任何其他配置中编译,第二行将被编译,而第一行则不会。

答案 6 :(得分:0)

转到"项目属性" - >构建应用程序的选项卡。如果配置:活动(调试),则启用调试配置。 下面的代码将打印到控制台。

#if DEBUG
    Console.WriteLine("in debug mode...");
#endif

如果配置:活动(发布),则启用发布配置。下面的代码将打印到控制台。

#if RELEASE
    Console.WriteLine("in release mode...");
#endif

如果要在DEBUG和RELEASE模式之间切换,请使用"调试/发布/配置管理器"在大多数开发人员都知道的情况下,按照工具菜单下的方式下载...但有时会被忽略,并导致混淆为什么上面的代码运行不正确。

相关问题