C#调试Debug和Release的区别
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("我是⼀般构造函数");
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执⾏结果⼀致,如下:
代码⼆:
IDE和EXE执⾏结果⼀致,如下:
Release发布模式下执⾏结果:
代码⼀:
IDE和EXE执⾏结果⼀致,如下:
代码⼆:
IDE和EXE执⾏结果⼀致,如下:
Ps: release 的时候会延迟加载这是⼀种优化的执⾏⽅式如果⼀个类型除了new以外没有任何⼈防问它他就会被延迟到第⼀次有⼈访问的时候加载
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论