Release和Debug的区别
1. debug 和 release 版本有什么不同
Debug:Debug 通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供 强大的应用程序调试能力。
Release:Release通常称为 发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
1.1 在VS中的区别
Debug 和 Release 并没有本质的区别,它们只是VS预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动
。如果我们愿意,我们完全可以把 Debug 和Release 的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为 MY_ABC 等。习惯上,我们仍然更愿意使用 VC 已经定义好的名称。
VS 选项 CONCLUSION:Debug 和 Release 只是两个编译的选项而已,是编译器所要进行工作的一系列指令,它们只是编译指令的集合的名称。
Debug 版本包括调试信息,所以要比 Release 版本大很多(可能大数百 K 至数M)。至于是否需要 DLL 支持,主要看你采用的编译选项。如果是基于 ATL 的,则 Debug 和 Release 版本对 DLL 的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release 版本需要MFC42.DLL支持。Release 不对源代码进行调试,不考虑 MFC 的诊断宏,使用的是 MFC Release 库,编译时对应用程序的速度进行优化,而Debug 则正好相反,它允许对源代码进行调试,可以定义和使用 MFC 的 诊断宏,采用 MFC Debug 库,对速度没有优化。
CONCLUSION:Debug 允许对源码进行调试,而 Release 则不对源码进行调试
2. gcc 下 release 版本与 debug 版本的控制
GCC(GNU Compiler Collection,GNU 编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发布的自由软件,也是 GNU 计划的关键部分,亦是自由的类 Unix 及苹果计算机 Mac OSX 操作系统的标准编译器。GCC(特别是其中的 C 语言编译器)也常被认为是跨平台编译器的事实标准。
#include <stdio.h>
#ifndef __DEBUG__ //n就是not,如果__DEBUG__未定义,替换为空,什么都没写就是空
#define debug_msg(fmt, args...)
#else
#define debug_msg(fmt, args...) printf(fmt, ##args)
#endif
int main()
{
debug_msg("%s\n","helloeworld");
printf("ok\n");
}
调试模式编译
lh@ubuntu:~/1219$ gcc -E debug_msg.c -D __DEBUG__
程序变为:
int main()
{
printf("%s\n","helloeworld");
printf("ok\n");
}
发布模式编译
lh@ubuntu:~/1219$ gcc -E debug_msg.c
程序变为:
int main()
{
;
printf("ok\n");
}
单独一个分号不起作用,相当于什么语句都不执行,直接跳过