调试--代码编写过程会出现错误,导致代码运行不能达到所期望的效果,找到代码中的错误,并解决它的过程叫做调试。
程序员写代码-->测试人员测试代码-->用户使用该程序
Debug和Release的区别:
Debug和Release是调试的两个版本,那么两者有啥差别呢?这么说吧,Debug是给程序员用的,程序员在编写代码的过程中,可能出现种种错误,导致程序运行不下去,或者程序可以运行但达不到期望的效果,而代码的‘量’又如此之大,编程人员不可能逐一排查,这时候就要定位到某一区域,调试运行该区域的代码,观察代码的运行结果 ,这个调试过程包括监视窗口,内存查找,栈堆调用等,这些调试功能就是隶属Debug调试版本下的。总的来说,相比于Release版本,Debug版本下的调试功能更加多样齐全。
既然如此,那还要Release做什么呢?
要知道,功能越丰富多样,其所需要占用的内存就更大,在高负荷下,其运行速度也要大打折扣。而Debug的功能用户是不需要使用的,用户只使用程序的运行功能。所以就需要对Debug的许多功能进行删减,从而为程序减压,Debug删减后的版本就是Release版本。
以下讲述Debug版本下的调试功能:
调试使用的快捷键(F5,CTRL+F5,F9,F10,F11)及其功能
1.逐过程(F10)
这是调试过程打开后的样子:
小箭头代表代码调试的阶段,按F10可以使小箭头跳动,即使代码一步步运转,注意,若小箭头到了调用的函数前,小箭头并不会进入到该函数内部,而是直接快速运行该函数然后出来(如,当小箭头到my_strcpy()函数时,并不会在my_strcpy()函数中一步步运转,而是快速访问后跳出来),若想是小箭头进入到函数内部,我们就需要用F11了,下面介绍F11的功能。
2.逐语句(F11)
使用F11,功能与F10极其相似,二者的区别仅仅在于F10不能使小箭头进入函数内部一步步运行,而F11可以,运行如下:
3..监视窗口(CTRL+ALT+W,1 ):
可以在‘要添加监视的项’中输出项目名称,包括:变量名,指针,数组名等;
调试过程中,在代码的行列前会出现一个箭头,该箭头显示的是代码正在调试的阶段,主要是由逐语句(F10)和逐过程(F11)控制;
注意:若箭头并未到达所输入的项目名前,则该项目处于未定义状态:
可以用F10,或F11,使箭头跳到所输项目名前。
4.*内存(CTRL+ALT+M,1 )
查看内存亦需要在调试的过程中进行,下面是查看内存的小窗口,在‘地址’处,输入某一变量的地址(或指针,或&+变量),下面即可输出改地址存放的变量,如下:
*这里需要注意的是,输入地址处不能以输入数组名,虽然数组名在大多数情况下代表的是数组首元素地址
5.栈堆--可以清楚地看清哪个函数调用哪个函数 被调用的函数在调用的函数上面
有时由于调用的函数太多,关系太复杂,一眼难以搞清楚函数的嵌套逻辑,如:
(*注意:这仍然只是少数调用的函数,并按照一定的顺序排列的,若添加更多的函数或函数的调用并没有在同一个文件中,那么其逻辑关系则更加难以分辨)
**同时注意,栈堆的使用通常与F11连用,因为栈堆亦需要小箭头进入到函数的内部。
下面是栈堆是使用:
函数的调用关系是从下往上的,即main()函数调用test()函数,后者再调用test1()函数,最后调用test2()函数。