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

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

  Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)

  以下参数均是在project–>settings–>C/C++–>Project Options:

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

  

参考网址:

  http://blog.chinaunix.net/uid-10018502-id-2972023.html

VS中的Debug 和 Release 编译方式的本质区别的更多相关文章

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

    一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程 ...

  2. [转]Debug 和 Release 编译方式的区别

    本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 3. 怎样“调试” Release 版的程序 Debug 和 Releas ...

  3. VS系列软件中debug和release编译环境有什么区别

    当编译和执行一个工程时,可以在Debug和Release两种配置下执行. Debug模式用于调试程序,这是个受保护的运行环境,它将告诉你程序是否有泄露,在运行时也能对特定函数的结果进行检查.然而它生成 ...

  4. java的debug和release编译方式

    以前没有注意过,其实Java编译成.class 有两种方式 使用javac,默认使用的release方式,而我们经常使用的MyEclipse工具,用的是debug模式. 区别暂时了解如下: relea ...

  5. Xcode 之 Debug 和 Release 模式切换方式 - iOS

    一.选择项目工程,其次选择 Edit Scheme 二.在弹框中选择 Run => Info => Build Configuration 选择中进行 Debug 和 Release 的切 ...

  6. [转] 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goog ...

  7. C#程序中判断DEBUG和RELEASE状态

    编辑 删除 习惯了用老方式(注释的方式)来对程序进行调试,不过昨天才发现这样调试存在很大的隐患:在工程发布的时候如果忘记把该注释的代码注释掉,而让这些调试信息随工程一起发布,如果是可见的调试信息倒好发 ...

  8. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  9. VS中生成debug和release的小问题

    vs里生成dll,需要在解决方案上右键"属性",然后"配置",点击右上角"配置管理器(0)",选择debug或release,方可生效.不然 ...

随机推荐

  1. SQL优化之索引分析

    索引的重要性 数据库性能优化中索引绝对是一个重量级的因素,可以说,索引使用不当,其它优化措施将毫无意义. 聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Ind ...

  2. api proxy设置 后端服务器代理

    location ^~ /api/{ ssi on; ssi_silent_errors off; proxy_redirect off; proxy_set_header Host $host; p ...

  3. boost::threadpool 调用类成员变量并传入参数 的方法

    1. 首先到官网下载   http://threadpool.sourceforge.net/   2. 包含头文件   #include "../boost/threadpool.hpp& ...

  4. 马士兵Spring-AOP-XML配置(2)

    一. UserDAO.java: package com.cy.dao; import com.cy.model.User; public interface UserDAO { public voi ...

  5. Bootstrap-Plugin:折叠(Collapse)插件

    ylbtech-Bootstrap-Plugin:折叠(Collapse)插件 1.返回顶部 1. Bootstrap 折叠(Collapse)插件 折叠(Collapse)插件可以很容易地让页面区域 ...

  6. 测试工具-PICT-微软基于数据项多个取值的正交法用例生成工具

    下载 http://download.microsoft.com/download/f/5/5/f55484df-8494-48fa-8dbd-8c6f76cc014b/pict33.msi 这里使用 ...

  7. ManagedProperty not injected in @FacesConverter

    I'm trying to inject a ManagedBean in my FacesConverted the following way: @ManagedBean @RequestScop ...

  8. Git----远程仓库之添加远程库02

    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub上创建一个Git库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...

  9. JS计算字符长度、字节数 -- 转

    一个汉字在UTF-8编码中占用几个字节? 占用3个字节的范围 U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 个 U+2F00 - U+ ...

  10. 图片上传 纯js编码

    ie8测试始终不支持,非ie方法一.二都正常 <!DOCTYPE html> <html lang="zh"> <head> <meta ...