Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用,我们使用的软件都是Release版本的。Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项进行编译链接。

VC编译器的编译选项可以在Project Setting中查看(Project菜单再选择Setting),如下图:

下面列出了控制台程序和Win32程序在Debug和Release设置下的典型配置:

典型的控制台程序在Debug版本下的编译选项:

/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/OpenFile.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

典型的控制台程序在Release版本下的编译选项:

/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/OpenFile.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c

典型的Win32程序在Debug版本下的编译选项:

/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Debug/Mouse.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

典型的Win32程序在Release版本下的编译选项:

/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Release/Mouse.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c

上一篇已经讲解了各种编译选项,这次针对Debug和Release常用选项再细化的分析下:

Debug设置下都有/nologo /MLd /W3 /Gm /GX /ZI /Od和最后的/FD /GZ /c

/nologo 编译器启动时的登录版权标志显示和编译期间的信息性消息显示(如Compiling...Linking...等)。

/MLd  使用 LIBCMTD.lib 创建调试多线程可执行文件

/W3   编译链接时警告级别为3,使用VC6.0编译STL时会有很多警告,可以将这个改动下,直接改成/w取消警告也是可以的。

/Gm   启用最小重新生成。在首次编译期间,编译器在项目的 .idb 文件中存储源文件和类定义之间的依赖项信息。(依赖项信息表明每个源文件所依赖的类定义以及该定义位于哪个 .h 文件中。)后面的编译使用存储在 .idb 文件中的信息确定是否需要编译某个源文件(即使它包含已修改的 .h 文件)。

/GX   启用同步异常处理。

/ZI    生成完整的调试信息。

/Od   禁用优化。

/GZ   运行时错误检查,/GZ在VC 2005中已不推荐使用,请改用/RTC。

/c    编译但不链接即禁止自动调用LINK程序。

还有个/FD没出现在上面的参数表中,也不在MSDN上。

Release设置下有/nologo /ML /W3 /GX /O2

/ML    使用LIBC.lib编译以创建单线程可执行文件。

/O2 等效于/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy,可以在多数情况下创建最快的代码。这样优化后,Release下生成的程序运行速度会比Debug快,有时甚至快上几倍。

/D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS"与/D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS"

这些以/D开头都是定义常数和宏。

其中的/D "_DEBUG"相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)。/D "NDEBUG"关闭条件编译调试代码开关(即不编译assert函数)

/Fp"Debug/OpenFile.pch" /YX /Fo"Debug/" /Fd"Debug/"与/Fp"Debug/Mouse.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/"

/Fp 为预编译头提供路径名,而不使用默认路径名(注1)。

/Fo 指定要使用的对象 (.obj) 文件名或目录而不使用默认设置。

/Fd 为调试信息创建的程序数据库 (PDB) 文件指定文件名。如果不指定,PDB 文件名默认为 VCx0.pdb.,其中 x 是所使用的 Visual C++ 的主版本。可以在Debug文件夹下查看这些文件。

/Yu 就是在生成期间使用预编译头文件。

/YX 在MSDN上找不到,但在cl.exe的参数说明中为自动处理预编译头。

注1.预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里。这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码。这样有助于提高编译速度。

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6731794

VC Debug与Release区别相关推荐

  1. 细说Debug和Release区别

    VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...

  2. Debug和Release区别

    VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...

  3. VC下Debug 和Release 区别【转】

    在工具栏上点右键,选择编译,将编译win32debug改为win32 Release即可.如果需要调试的话,还需要再改回来方可. 最近写代码过程中,发现 Debug 下运行正常,Release 下就会 ...

  4. VC中debug和release版本的区别

    vc中debug和release的不同 收藏  在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...

  5. VS Debug和Release版本的区别

    VS Debug和Release版本的区别 1. 变量. 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值 ...

  6. 关于Debug和Release之本质区别的讨论

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

  7. debug和release的区别

    1.Debug和Release有什么区别,为什么要使用Release版本!  2.怎么把Debug转成Release Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至 数M ...

  8. 关于Debug和Release之本质区别的讨论(转载)

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

  9. 深入了解Debug和Release的区别

    原文地址:https://blog.csdn.net/sky___ice/article/details/8993885 一: Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写, ...

最新文章

  1. 如何使用postman测试流文件_干货|如何用Postman做集成测试
  2. TinyMind邀你写诗!100小时GPU,等你来领取!
  3. Mila唐建团队新作:可迁移、可解释的单细胞RNA测序模型
  4. 东芝移动硬盘拆解图_华为Mate40系列新技术曝光:海思闪存亮相,性能超三星东芝...
  5. 动态系统开发方法DSDM
  6. PostgreSQL 的一个简单连接和查询操作——示例
  7. 查询前10条_98条铁路!2021年底前计划开工建设铁路进度一览(10月8日更新)
  8. java多线程异步调用别的系统接口代码_60 多个实例讲解,彻底搞懂 Java 多线程!
  9. mysql group_concat null_MySQL教程之concat以及group_concat的用法
  10. [linux]tcpdump抓包
  11. java在线生成uuid_Java生成uuid
  12. duliu题之狼抓兔子题解
  13. AirPlay to Mac 如何工作以及使用它需要什么?
  14. 线性代数在计算机中的应用论文,论线性代数在现实生活中的应用(结课论文)
  15. 1996年图灵奖--阿米尔·伯努利简介
  16. android 写出棋盘效果,Android五子棋棋盘的绘制
  17. 「兔了个兔」福兔贺春,纯CSS实现超精美月兔404界面(附源码)
  18. 2013-04-26-成都华为实习生招聘上机笔试
  19. mac苹果系统数据恢复软件恢复苹果电脑硬盘数据教程
  20. R语言如何绘制词云图(17)

热门文章

  1. python基础学习06_if条件判断(多重判断、嵌套、三目运算)
  2. 香港svg 3d地图
  3. 叮当健康再闯IPO,三年累亏近30亿,如何杀出巨头重围?
  4. 我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)
  5. 帕斯卡三角形 python
  6. 直链站php源码,源码库分享PHP版百度网盘直链/外链源码
  7. 机器学习工程师 — Udacity 创建客户细分
  8. 快速连接github(修改hosts文件)
  9. matlab dcc,重金感谢(dcc-mvgarch)!
  10. All about Datacenter Networking Interconnection 数据中心网络互联