目录
前言:工欲善其事,必先利其器。我们想要更好的去编写代码,查找问题,就离不开一些调试的技巧,这篇文章我会为大家分享一些VS2022中的一些调试技巧。
一.什么是bug
--bug本意是"昆虫"或者"虫子",现在一般指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。为什么bug一词会有这样意思的转变呢,这是因为世界上的第一个程序错误是由一只飞蛾引起的。
二.什么是调试
--当我们发现程序中存在的问题的时候,那么我们就得找到问题所在并解决问题。
这个找问题的过程就是调试了,英文名叫debug
调试一个程序,首先也是最重要的就是承认出现了问题,然后再通过各种方法去定位问题的位置,可能是通过逐过程的调试,也可能是隔离和屏蔽代码的方式,找到问题所在位置,然后进一步确定错误产生的原因,最后修复代码,解决问题,重新测试。
在调试的过程中我们要做到心中有数,自己知道代码应该怎么去执行,然后再去看代码有没有按照我们预想的路线去执行,调试可以增加我们对代码的理解和掌控,掌握了调试就能看到本质,对程序内部一览无余。
三.Debug和Release
我们在VS2022上编写代码的时候,就会看到有debug和release两个选项,接下来给大家介绍一下他们分别是什么意思吧 ~
Debug通常称为调试版本,它包含调试信息,并且不做任何优化,便于我们去调试程序;我们写代码时,需要经常性的调试代码,就要将这里设置为debug,这样编译产生的是debug版本的可执行程序,其中包含调试信息,是可以直接调试的。
Release通常被称为发布版本,它往往是进行了各种优化后,使得程序在代码大小和运行速度上都是最优的,以便用于很好的去使用。当我们写完代码,且不断调试优化后,最终发给别人的版本就会设置为release,编译产生的就是release版本的可执行程序,这个版本是用户使用的,无需包含调试信息等。
四.vs调试快捷键
--调试我们需要先将版本改为Debug
在调试当中最常用的几个快捷键:
- F9:创建断点和取消断点,断点的作用是可以在程序的任意位置设置断点,打上断点后就可以让程序执行到想要的位置后暂停执行,而后我们可以利用F10,F11等快捷键,观察代码执行的细节,如果是条件判断,满足这个条件才会触发断点。
- F5:开始调试,经常用来直接跳到断点处,和F9配合使用。
- F10:逐过程,通常用来处理一个过程,可以是一条语句也可以是一次函数调用。
- F11:逐语句,就是每次都执行一条语句,这个快捷键可以让我们的执行逻辑进入函数内部。在函数调用的地方,想要进一步进入函数观察的话,必须使用F11,如果使用F10,会直接完成函数调用。
- CTRL+F5:开始执行不调试,如果你想让程序直接运行起来不去调试的话就可以使用这个快捷键。
五.监视和内存视察
5.1--监视
--按F10开始逐过程调试后(如果没打断点的话不要直接用F5,会直接调试到结束的),在菜单栏中【调试】->【窗口】->【监视】,打开任意一个监视窗口,输入你要观察的对象就可以了,具体操作如下图;
5.2--内存
--如果监视还不能看仔细的话,也是可以观察变量在内存中的存储情况的,还是在调试后,在菜单栏中【调试】->【窗口】->【内存】,打开任意一个内存窗口,打开后在地址栏输入:arr,&num,&c这类地址,就能观察到该地址处的数据了
除此以外,在调试的窗口中还有很多别的选项,大家可以自行去验证使用
补充:如果调试进入想通过形参去观察数组内容的话,可以采用数组名,n的形式,二维数组只用输入有几行就行了
六.编译常见错误归类
6.1--编译型错误
--编译型错误一般都是语法错误,这类错误一般看错误信息就能找到线索的,双击错误信息也能初步的跳转到代码错误的地方或者附近,编译错误是比较容易解决的。
我们来看一个会出现编译错误的代码体会一下吧
#include<stdio.h>
int main()
{
printf("hehe\n")//这里少了个;
return 0;
}
6.2--链接型错误
--看错误信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。比较常见的有这些:
- 标识符名不存在
- 拼写错误
- 头文件没包含
- 引用的库不存在
我们来看一个因为没包含头文件发生的链接型错误
//include<stdio.h>//本来应该包含的头文件,我现在给注释掉了。
int main()
{
printf("hehe\n");
return 0;
}
6.3--运行时错误
--运行时错误也是最为麻烦的,是千变万化的,我们通常需要借助调试,逐步定位问题,调试是可以用来解决运行时问题的。
补充小技巧:通过快捷键CTRL+F可以进入搜索栏,你可以输入你想要查找的代码,并且还可以进行单个修改或者全部修改,如下图展示:
结语:本篇文章就到此结束了,这里为大家分享了部分VS2022中的调试技巧,随时欢迎大家在评论区补充交流,感谢大家的关注和支持!