一、定义
(1)Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
(2)Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用二、Debug和Release区别
Debug包含调试信息,不做任何优化。而Release不包含调试信息,做了各种优化。(相比Debug同一程序它的内从较小)
见下图:
三、来看下面一段程序
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i <= 12; i++) //至少<=12
{
printf("hehe\n");
arr[i] = 0;
}
system("pause");
return 0;
}
在Debug环境下,上面程序是输出死循环hehe,而在Release环境下输出13个hehe。
Why???
因为变量i和数组arr都是局部变量定义在栈区,而栈区给变量分配内存是先使用高地址在使用低地址。所以i在高地址,arr在低地址,在vs2013编译环境中,两者分配内存之间保留两个空间(linux中保留一个,vc6.0一个也会死循环)。所以当i越界访问时,
&i和&arr[12]的地址一样,所以进行到i= 12时,i又重新等于0,所以造成了死循环。解决方法即是把数组创建放到变量i创建之前。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i <= 12; i++)
{
printf("hehe\n");
arr[i] = 0;
}
system("pause");
return 0;
}
由于Release存在优化,所以自动把两者交换,所以不会死循环。最终结果输出13个hehe。
所以说调试就是在Debug版本的环境中找代码中潜伏的问题的一个过程。