文章目录
- 1.Debug 和 Release
- 2.VS的调试快捷键
- 3.对程序的监视和内存观察
- 3.1监视
- 3.2内存
- 4.编程常见错误归类
- 4.1编译型错误
- 4.2链接型错误
- 4.3运行时错误
1.Debug 和 Release
在我们使用的编译器 vs 中,这个位置有两个选项,分别为Debug和Release,它们有什么作用呢?
Debug:Debug通常称为调试版本它包含调试信息,并且不作任何优化,便于程序员调试程序;
程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是
debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。所以我们每次开始写代码的时候一般都是为Debug模式。
Release:Release 称为发布版本它往往是进⾏了各种优化,使得程序在代码大小和运⾏速度上都是最优的,以便用户很好地使用。当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付客户使用的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个版本是用户使用的,⽆需包含调试信息等。
我们在编译器写下以下代码,并分别在Debug和Release条件下运行一下,然后再看看与之相对于的文件。
Debug条件下:
Release条件下:
对⽐之下我们可以看到从同⼀段代码,编译生成的可执行⽂件的大小,release版本明显要小,而debug版本明显大,这就是两个版本有无进行优化的区别。
2.VS的调试快捷键
首先,我们想进行调试的话,编译器必须是Debug的模式
以下有几个调试常用的快捷键
F9:创建断点和取消断点
断点的作用是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂定执
行,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执行细节。
条件断点:满足这个条件,才触发断点
例如下图中的红色圆圈就是断点,该断点对应第6行,启动调式时则可以让程序执行到该位置
F5:启动调试,经常⽤来直接跳到下⼀个断点处,⼀般是和F9配合使用
即在认为有问题想对该位置进行调式观察的地方打下断点后,F5启动调式就可以对该处进行调试
F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调用,或者是⼀条语句。
比如在遇到函数调用的语句时,不会跳转到函数的内部再执行函数中的每条语句,只直接对函数调用这条语句执行一次
F11:逐语句,就是每次都只执行一条语句,这个快捷键可以使我们的执行逻辑进⼊函数内部,对函数内部的语句一条条的指向。在函数调用的地方,想进⼊函数观察细节,必须使用F11,如果使用F10,直接完成函数调用。
CTRL + F5:开始执行不调试,如果你想让程序直接运行起来而不进行调试就可以直接使用
3.对程序的监视和内存观察
3.1监视
我们如果不调试,直接执行,那么得到的结果就直接是最终结果,而不能观察到某个值在程序中是如何变化的。
所以如果我们想要知道该值在程序中是如何变化的,我们就可以在调试的情况下打开监视窗口
开始调试后,在菜单栏中【调试】->【窗口】->【监视】,打开任意⼀个监视窗⼝,输⼊想要观察的对象就可以了。
例如:
这里可以看到执行到此处时,a是5
执行到此处时,a就变成了15
3.2内存
如果监视窗口看的不够仔细,也可以观察变量在内存中的存储情况,在【调试】->【窗口】->【内存】打开内存窗口:
我们在调试的条件下,可以通过&来获取某个值的地址,从而查看该值在内存中的情况。
如:
想要知道b的内存情况,就&吧,然后按下回车
我们就可以找到该值所在地址,并且知道它的内存,存了一个10
在打开内存窗口后,要在地址栏输⼊:arr(数组的首元素表示地址),&num,&c,这类地址,就能观察到该地址处的数据。
当然vs中在调式条件下还有许多窗口等,可以自行研究研究
4.编程常见错误归类
4.1编译型错误
编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。
4.2链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。
⼀般是因为以下原因:
1.标识符名不存在
2.拼写错误
3.头⽂件没包含
4.引用的库不存在
4.3运行时错误
运行时错误是多种多样的,当遇到这种问题时,我们首先可以读一读代码,找找可能出错的位置,再在这些地方进行调式,逐步排查并且找出错误。