Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

Debug 版本

 参数    含义

/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)

/Od 关闭优化开关

/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)

/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译

/GZ 可以帮助捕获内存错误

/Gm 打开最小化重链接开关,减少链接时间

 

Release 版本

 参数     含义

/MD /ML 或 /MT 使用发布版本的运行时刻函数库

/O1 或 /O2 优化开关,使程序最小或最快

/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)

/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改

实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。

 

 

 

示例代码一:

 

class Program

    {       

        private static TestStaticConstructure a = new TestStaticConstructure();

        static void Main(string[] args)

        {          

            Console.ReadLine();

        }

    }

 

 

class TestStaticConstructure

    {

        private string name;

 

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        public TestStaticConstructure()

        {

            Console.WriteLine("我是一般构造函数");

        }

        static TestStaticConstructure()

        {

            Console.WriteLine("我是静态构造函数");

        }

}

 

示例代码二:

class Program

    {       

        private static TestStaticConstructure a = new TestStaticConstructure();

        static void Main(string[] args)

        {          

a.Name = "";           

Console.ReadLine();

        }

    }

 

 

class TestStaticConstructure

    {

        private string name;

 

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        public TestStaticConstructure()

        {

            Console.WriteLine("我是一般构造函数");

        }

        static TestStaticConstructure()

        {

            Console.WriteLine("我是静态构造函数");

        }

    }

 

Debug发布模式下执行结果:

  代码一:

IDE和EXE执行结果一致,如下:

 

release 版本 memset _release_release 版本 memset

代码二:

IDE和EXE执行结果一致,如下:

 

release 版本 memset _release_示例代码_02

Release发布模式下执行结果:

  代码一:

IDE和EXE执行结果一致,如下:

 

release 版本 memset _release_release 版本 memset_03

代码二:

IDE和EXE执行结果一致,如下:

 

release 版本 memset _release_构造函数_04

 

Ps: release 的时候会延迟加载  这是一种优化的执行方式  如果一个类型除了new以外  没有任何人防问它   他就会被延迟到第一次有人访问的时候加载