VC Debug与Release区别

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/heishanglaoyao/p/10489118.html

时间: 2024-10-13 04:25:37

VC Debug与Release区别的相关文章

细说Debug和Release区别

VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常.网上查找了些资料,在这 罗列汇总下,做为备忘- 一.Debug 和 Release 的区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化

【转】Debug和Release区别

VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常.网上查找了些资料,在这 罗列汇总下,做为备忘- 一.Debug 和 Release 的区别         Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往

Debug和Release区别

Debug 和 Release 的区别         Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用.      Debug 和 Release 的真正区别,在于一组编译选项. Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动. Debug与Release不同的问题在刚开始编写代码时会经

Debug和Release区别(转)

地址:https://zhidao.baidu.com/question/629188090208609884.html 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常. Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得

debug和release转载

Debug和Release区别 转自草原和大树 VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常.网上查找了些资料,在这 罗列汇总下,做为备忘- 一.Debug 和 Release 的区别         Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序

VC下Debug 和 Release 版本区别

Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来.当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等.习惯上,我们仍然更愿意使用VC已经定义好的名称.     Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M).至于是否需要DLL支持,主要看你采用的编译选项.如果是基于 ATL的,则Debug

在用VC编译下debug和release的什么区别

DEBUG和RELEASE 版本差异及调试相关问题:.         内存分配问题 1.          变量未初始化.下面的程序在debug中运行的很好. thing * search(thing * something)        BOOL found;        for(int i = 0; i < whatever.GetSize(); i++)          {          if(whatever[i]->field == something->field

Debug和Release之本质区别

Debug 和 Release 编译方式的本质区别    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用.    Debug 和 Release 的真正秘密,在于一组编译选项.下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本  参数 

Debug与Release版本区别

Debug与Release版本区别 Debug版本就是调试版本,Visual C++ 6.0默认的就是Debug版本.在Debug版本中,可以使用单步执行.跟踪等功能,但其生成的可执行文件比较大,代码运行比较慢.Release版本就是发行版本,其运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能.     还有一点,Release版本的exe文件链接的目标是标准的MFC DLL(Use MFC in a shared or static dll).比如MFC42.DLL.这些DLL在