目录
前言
我们都知道VS的功能很强大,特别是它的调试功能,可以很方便的帮助我们找出代码中的bug,今天让我们看看VS中有哪些调试技巧吧---->
1.bug的由来
bug本意“虫子”,最早是由一位为美国海军工作的电脑专家——格蕾丝·赫柏 提出来的。
1947年9月9日,格蕾丝·赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员在运行时却出现了问题,之后通过之一排查,他们在其中两个继电器中发现了一只被烤糊的飞蛾。于是,人们便将程序故障统称为“臭虫bug”。那只导致继电器短路的飞蛾也名垂千古,永久的保留在了美国华盛顿国家历史博物馆中。
2.什么是debug(调试)
接上述故事,在出现了bug后,人们便会想如何去排查bug,于是人们将排除程序故障叫做debeg,也就是我们将要说的调试。
调试一个程序,首先是我们承认了一个错误后,我们通过对程序进行逐一排查(包括逐语句和逐过程),将问题出错的原因找出来并进行修改,最终得到我们想要的代码。
3.调试环境(Debug VS Release)
我们在用VS编译代码时常会看到以下两个选项,那么他们分别是什么意思呢?
PS:诺没有以上选项,请鼠标右击工具栏空白处,打开【标准】。
Debug通常称为调试版本,它包含调试信息,并不做任何优化。方便程序员在写代码的过程中进行调试,这样编译产生的是debug版本的可执行程序,其中包含调试信息,可以直接调试。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。此处编译产生的就是release版本的可执行程序,这个版本是用户使用的,无需包含调试信息等。
通过以上两张图片的对比,我们发现在Release版本下的可执行程序确实要比Debug版本下所占据内存要小一些,原因也正如上述所说,Release版本的可执行程序中没有包含调试信息。因此我们可以得出,想要进行调试,需要将VS设置成Debug,这就是调试环境的准备工作。
4.VS调试快捷键
F9:创建断点和取消断点
F5:启动调试,并跳到下一个断点处
(PS:一般搭配F9使用,诺没有设置断点,则会直接跳到运行结果)
F10:逐过程,每次执行一整个过程,一个过程可以是一整个函数,或是一条语句
F11:逐语句,每次只执行一条语句,可以进入到函数内部
Shift+F5:终止调试
Ctrl+F5:跳过调试,直接运行
想了解更多实用快捷键请看这篇文章:http://t.csdn.cn/Yt2cS
5.监视和内存观察
在调试的过程中,我们想要时刻监视某一个变量的值,我们可以怎么操作呢?以下列代码为例:
#include<stdio.h>
int main()
{
int kun[5] = {0};
for (int i = 0; i < 5; i++) 
{
kun[i] = i;
}
return 0;
}
5.1.监视
在开始调试后,在菜单栏中【调试】->【窗口】->【监视】,任意打开一个窗口,输入想要监视的对象即可。
PS:在没有开始调试前是看不到监视窗口的。
打开监视窗口后可观察到—>
5.2内存
我们可以观察变量的值,同时也可以观察变量的内存
方法同监视窗口一样:【调试】->【窗⼝】->【内存】
打开内存后可观察到—>
PS:在打开内存窗⼝后,要在地址栏输入kun,&i等等地址信息后,便可以观察到该地址的数据。
6.断点与条件断点
6.1断点
断点的作用是将调试跳转到任意位置进行执行。我们可以通过在某几处打下断点,再按住F5快速跳转到该位置,再通过F10,F11等快捷键,观察代码的细节。
在此代码中,我们在第12行的位置打下断点,然后直接按下F5并打开监视窗口,观察调试运行结果如下:
发现和结论一样,调试直接从断点处(第12行)开始。
6.2条件断点
条件断点:当我们的断点设在一个循环内部时,默认断点处为循环的开始,如果我们想从循环的中间开始调试,例如从第三次、第十次、第五十次等,我们便可以设置条件断点,帮助我们跳过前面几次循环,减少不必要的操作。
条件断点的设置:【鼠标右击断点处,点击条件】
设置条件内容
我们设置从第三次循环开始,然后直接按下F5,观察:
在第三次循环开始,ji数组前三次均已被赋值0,可看到调试按照我们的需求从第三次开始了。
小技巧:
• 在函数内部打断点,可快速跳转到函数
• 在数组传参,调试进入函数时,如何在监视窗口观察数组的内容: 数组名,n 的形式
7.编程常见报错
7.1编译型错误
一般指语法错误,如缺少分号等。该错误类型比较容易修改,只需通过双击提示便可到达报错内容的附近。
7.2链接型错误
一般包括:
• 标识符名不存在
• 拼写错误
• 头文件没包含
• 引用的库函数不存在
7.3运行时错误
运行时错误是千变万化的,也是最让人头疼的,它可能出现在我们的一个小小的疏忽大意中。
借助刚刚所讲的调试,逐步定位问题所在,可以很好的帮助我们找到并解决该类错误。
结语
以上便是有关调试技巧的全部内容啦,如果还有补充,欢迎在下方留言。如果本篇内容对您有些许帮助,给小编来个三连支持一下呗~~