VC Debug与Release区别
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区别相关推荐
- 细说Debug和Release区别
VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...
- Debug和Release区别
VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...
- VC下Debug 和Release 区别【转】
在工具栏上点右键,选择编译,将编译win32debug改为win32 Release即可.如果需要调试的话,还需要再改回来方可. 最近写代码过程中,发现 Debug 下运行正常,Release 下就会 ...
- VC中debug和release版本的区别
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- VS Debug和Release版本的区别
VS Debug和Release版本的区别 1. 变量. 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值 ...
- 关于Debug和Release之本质区别的讨论
一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化 ...
- debug和release的区别
1.Debug和Release有什么区别,为什么要使用Release版本! 2.怎么把Debug转成Release Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至 数M ...
- 关于Debug和Release之本质区别的讨论(转载)
一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程 ...
- 深入了解Debug和Release的区别
原文地址:https://blog.csdn.net/sky___ice/article/details/8993885 一: Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写, ...
最新文章
- 如何使用postman测试流文件_干货|如何用Postman做集成测试
- TinyMind邀你写诗!100小时GPU,等你来领取!
- Mila唐建团队新作:可迁移、可解释的单细胞RNA测序模型
- 东芝移动硬盘拆解图_华为Mate40系列新技术曝光:海思闪存亮相,性能超三星东芝...
- 动态系统开发方法DSDM
- PostgreSQL 的一个简单连接和查询操作——示例
- 查询前10条_98条铁路!2021年底前计划开工建设铁路进度一览(10月8日更新)
- java多线程异步调用别的系统接口代码_60 多个实例讲解,彻底搞懂 Java 多线程!
- mysql group_concat null_MySQL教程之concat以及group_concat的用法
- [linux]tcpdump抓包
- java在线生成uuid_Java生成uuid
- duliu题之狼抓兔子题解
- AirPlay to Mac 如何工作以及使用它需要什么?
- 线性代数在计算机中的应用论文,论线性代数在现实生活中的应用(结课论文)
- 1996年图灵奖--阿米尔·伯努利简介
- android 写出棋盘效果,Android五子棋棋盘的绘制
- 「兔了个兔」福兔贺春,纯CSS实现超精美月兔404界面(附源码)
- 2013-04-26-成都华为实习生招聘上机笔试
- mac苹果系统数据恢复软件恢复苹果电脑硬盘数据教程
- R语言如何绘制词云图(17)
热门文章
- python基础学习06_if条件判断(多重判断、嵌套、三目运算)
- 香港svg 3d地图
- 叮当健康再闯IPO,三年累亏近30亿,如何杀出巨头重围?
- 我的Vu啊(vue 2.0,数据监听,计算属性,组件传参)
- 帕斯卡三角形 python
- 直链站php源码,源码库分享PHP版百度网盘直链/外链源码
- 机器学习工程师 — Udacity 创建客户细分
- 快速连接github(修改hosts文件)
- matlab dcc,重金感谢(dcc-mvgarch)!
- All about Datacenter Networking Interconnection 数据中心网络互联