1、问题阐述
在VC工程比较大时,开发的软件通常会出现在Debug状态下能够正常运行,而在Release状态下无法正常运行的情况。这种错误的检查的前提是要弄清二者之间本质的区别。
2、Debug和Release的区别
①Debug版本包含了大量的调试信息,所以形成的可执行文件要比Release版本大。
②二者根据选择的编译选项不同,需要的支持库也不同,如果是MFC的工程,则需要MFC42D.dll等库支持,而Release版本则需要MFC42.dll的支持。
③Release Build不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译是对应用程序的速度进行优化,而Debug Build则正好相反,它允许对源代码进行调试,可以定义和使用MFC的诊断宏,采用MFC Debug库,对速度没有优化。
以上从现象上介绍了Debug版本和Release版本之间的区别,它们的本质区别在于一组编译的开关量的设置,编译时开关量如表2-2和表2-3所示
表2-2 Debug版本编译选项表
编译选项
|
设置
|
/MDd
|
与MSVCRTD.lib调试库链接
|
/MLd
|
与LIBCD.lib调试库链接
|
/MTd
|
与LIBCMTD.lib调试库链接
|
/Od
|
关闭优化开关
|
/D
|
打开编译器调试开关
|
/ZI
|
创建Edit and continue(编辑继续)数据库,这样在调试过程中如果改了源代码不需要重新编译
|
/GZ
|
可以帮助捕获内存错误
|
/Gm
|
打开最小化重链接开关,减少链接时
|
表2-3 Release版本的编译选项表
编译选项
|
设置
|
/MD
|
与MSVCRT.lib链接
|
/ML
|
与LIBC.lib链接
|
/MT
|
与LIBCMT.lib链接
|
/o1
|
最小化空间
|
/o2
|
最快速度
|
/D
|
设置为NDEBUG
|
/GF
|
启用字符串池
|
如果还想获得更多关于《Visual C++代码参考与技巧大全》的内容,可点击下面网址,http://www.cppblog.com/kangnixi/archive/2010/01/13/105591.html