现在的位置: 首页 > web前端 > 正文

release版本出错情况

2020年07月17日 web前端 ⁄ 共 967字 ⁄ 字号 评论关闭

  ReleaseCandidate(RC)候选版本,用于指软件或操作系统的发布,一般与Debug版本相对应,后者可以调试,包括了每个执行码对应的源代码信息,而一般过了测试版时期,基本没有什么问题后,会发布几个略微不同的版本,就叫做rc1、rc2,然后从这里面挑选一个作为正式版本。Release版本去掉了。


  Debug和Release编译方式的本质区别


  Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。


  Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。


  Debug和Release的真正秘密,在于一组编译选项。


  下面列出了分别针对二者的选项


  (当然除此之外还有其他一些,如/Fd/Fo,但区别并不重要,通常他们也不会引起Release版错误,在此不讨论)


  Release版本出错情况


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


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


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


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


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


  有了上面的介绍,我们再来逐个对照这些选项看看Release版错误是怎样产生的


  RuntimeLibrary


  链接哪种运行时刻函数库通常只对程序的性能产生影响。


  调试版本的RuntimeLibrary包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的RuntimeLibrary通常很稳定,不会造成Release版错误;倒是由于Debug的RuntimeLibrary加强了对错误的检测,如堆内存分配,有时会出现Debug有错但Release正常的现象。应当指出的是,如果Debug有错,即使Release正常,程序肯定是有Bug的,只不过可能是Release版的某次运行没有表现出来而已。


  总之,Release版给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.