当前位置:   article > 正文

Debug和Release

debug和release

什么是Debug?

DEBUG是计算机排除故障的意思。马克2号(Harvard Mark II)编制程序的格蕾丝·霍珀(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍珀诙谐地把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。如DOS系统中的调试程序,程序名称就叫DEBUG。DEBUG在windows系统中也是极其重要的调试操作。

Debug 是“调试”的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化,程序还是“原汁原味”的。

你没听错,不是任何一个程序都可以调试的,程序中必须包含额外的辅助信息才能调试,否则调试器也无从下手。

什么是Release?

Release 是“发行”的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提高执行效率,虽然最终的运行结果仍然是我们期望的,但底层的执行流程可能已经改变了。

编译器还会尽量降低 Release 版本的体积,把没用的数据一律剔除,包括调试信息。

最终,Release 版本是一个小巧精悍、非常纯粹、为用户而生的程序。

Debug 版本的存在是为了方便程序员开发和调试,性能和体积不是它的重点;Release 版本是最终交给用户的程序,性能和体积是需要重点优化的两个方面。

在开发过程中,我们一般使用 Debug 版本,只有等到开发完成,确认没有任何 Bug 之后,希望交给用户时再生成 Release 版本。

接下来我们来看一段代码

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i =0 ;
  5. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  6. for (i = 0;i <= 12;i++)
  7. {
  8. printf("hehe\n");
  9. arr[i] = 0;
  10. }
  11. return 0;
  12. }

这个代码会打印多少个“hehe”呢?

我们首先把程序调节成Debug模式

 很显然程序是会瞬间奔溃,也就是说是个死循环

 接下来,我们来看看Release模式

 

 它会直接给出答案,那么问题来了,

为什么这两种模式下,会出现截然不同的结果呢?

总结:


Debug与Release不同的问题在刚开始编写代码时会经常发生,99%是因为你的代码书写错误而导致的,所以不要动不动就说系统问题或编译器问题, 努力找找自己的原因才是根本。我从前就常常遇到这情况,经历过一次次的教训后我就开始注意了,现在我所写过的代码我已经好久没遇到这种问题了。下面是几个 避免的方面,即使没有这种问题也应注意一下:
1. 注意变量的初始化,尤其是指针变量,数组变量的初始化(很大的情况下另作考虑了)。
2. 自定义消息及其他声明的标准写法
3. 使用调试宏时使用后最好注释掉
4. 尽量使用try - catch(...)
5. 尽量使用模块,不但表达清楚而且方便调试。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号