Debug与Release
区别与相同
1、相同
在vs中,debug与release均可进行代码的编译
2、区别
首先,我们通过一个实例来进行演示
如图是我们创建的一个演示项目,头文件中是add函数和max函数的声明;源文件中创建的三个.c文件分别是add函数,max函数和main函数。
当我们通过debug版本运行代码的时候,在项目路径下会产生一个debug文件夹,这个文件夹是之前没有的,当我们点击编译器中的生成解决方案的时候,debug文件夹会自动在项目路径下产生
debug文件夹中包含编译之后生成的.obj文件和项目生成的一些文件。
其次,我们来看一下release下的编译过程
可以看到通过release版本,项目生成之后在项目文件下生成release文件。
同样,在release文件夹中也包含编译生成的.obj文件和项目生成所包含的文件。
这两种版本在进行预编译之后,看上去并没有太大的变化,实际上在他们进行预编译之后生成了一个可执行的.exe文件。通过这两个.exe文件,我们可以看到差别。
原因在于:
- debug版本是开发调试的版本,程序在编译的过程中会包含一些调试信息进去,帮助我们跟踪代码,查找问题,查找bug。
- release版本是发行版,程序员已经开发好软件,调试没问题,没有bug,要给客服去用的时候就会用release版本。当我们在开发以后,没有bug,没有问题的时候给用户用的时候,有关调试的一些内容就可以不需要了,让程序精简许多。
注:release版本不是调试版本,不包含调试信息
就是因为release版中中不包含调试信息,因此,release版本中的.exe文件的大小才会比debug版本下的小。
补充:release版本下,不能进行断点调试,而在debug版本下,可以进行断点调试。
总结
-
在release版本中,不包含有关调试的信息,而在debug版本下包含调试的信息。在开发程序的过程中,大部分时间都是在debug版本下进行的,之后在程序开发结束,并且没有bug,没有问题,提交程序给客户的时候才会使用release版本。
-
release版本下不能进行断点调试,而在debug版本下可以进行版本调试
Tips 1
当我们点击生成解决方案的时候,会出现
当项目中的代码未发生改变的时候,我们再次点击生成解决方案的时候,会出现
原因是,我们的代码未发生改变,我们再一次编译的时候,与第一次编译生成的文件一模一样,所以不会再次编译,除非改一下代码
当我们在return x+y后面加一个空格之后,再次进行编译,
只有将add.c编译了一下,因为项目中的其他代码没有改变,所以不用编译,上一次编译的.odj文件还在,直接链接.obj就好了。
Tips 2
在windows中,整个工程如何编译,不需要人为的去做比较复杂的操作,我们只需要点击编译器中的生成解决方案即可。那么,
在Linux中怎么能像在windows中一键生成解决方案呢?
我们需要在Linux中写一个Makefile(makefile,这里’m‘的大小写无所谓),就可以达到像windows一样。其实windows中也有一个类似Makefile文件
makefile文件的类容
编译
当代码未改变的时候,再次使用make命令,会出现
出现和windows一样,由于代码未改变,所以不进行编译。
同理:
给add函数加上空格之后,再次进行编译
发现只编译了add.c这个文件,因为只改变了add.c中的代码,其他的代码并没有发生改变。这里就变成和windows中一样了。