VS调试技巧

老铁们,追秋今天又与你们见面啦,今天给大家带来的是程序员必不可缺的一项本领:调试程序。

当然,每个程序员使用的编译器不一样,今天追秋给大家带来的是VS编译器有关的调试技巧;今天只是初步分享一下浅层的调试技巧,以后会给大家分享更多的关于调试的技巧;话不多说,直接开始我们今天的分享。

在学习具体的编译技巧之前,当然要了解一些有关的快捷键,下面给大家整理出来:

CTRL+F5:直接开始执行程序不启动调试

F5:启动调试,经常来到下一个断点处

F9:创建和取消断点

       断点:可以让程序在调试过程中在遇到断点时停下,方便进行调试,可以使程序在任意位置停止,进而一步一步的执行下去

F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句

F11:逐语句,这个过程与逐过程类似,但是可以进入函数内部进行调试

理解了这些调试技巧后,下面追秋来给大家进一步梳理这些快捷键的具体使用技巧,下面使用一组代码来进行调试,方便朋友们的理解,

我们下面来进行逐步分析:

当我们按下CTRL+F5的时候,程序会直接运行,效果如下:

当然这个程序运行时出现的是死循环,这个问题在下面会给大家解决,我们先看下一个调试技巧:

在进行调试之前,这里再给大家分享一个小技巧,我们可以在如下窗口中看到程序中所定义的变量:

当我们按下监视窗口的时候,我们可以看到下面的窗口:

 我们可以在如红色标记所指向的区域添加我们要观察的参数,如添加arr:

 很显然,我们程序中的arr数组还未创建所以,arr数组中放置的是随机值,而当我们按下F10的时候,程序往下走一步,创建arr数组,效果如下:

 显然,这里的arr数组已经被创建,可以进进行下一步的调试了,继续按下F10,看看效果如何:

 此时,i的值被修改为0且arr[0]的值被修改为0,同时终端打印出一组数据,此时继续按下F10,让程序进行下去:

此时数组arr中的所有数据已经被修改为0,那为什么程序会出现死循环呢?这个时候我们加入创建一个arr[10]和are[11]的数组,然后按下F10,看看效果:

显然在新创建的arr[10]和arr[11]中放置的是随机值,当我们进行调试时,效果会是什么样子的呢?我们下面按下F10进行下一步的调试:

 这里的arr[10]的值居然被修改为0,那么继续下去arr[11]的值会被修改吗?我们来看:

 我们通过调试惊奇的发现,额外创建的数组居然也被程序改变了其中的值,但是我们所创建的数组中并没有给定他们的大小和空间,而且程序出现的是死循环的现象,此时我们还未分析出原因,下面我们在进行一次调试会怎么样呢?下面来看效果:

这里还需要创建一个arr[12]的数组参数

我们发现,arr[12]的值居然会跟着i的改变一起改变,我们要是没有调试的话肯定是发现不了的,那么为什么会出现这种现象呢?我们这里在监视窗口中输入&i和&arr[12],看一下他们两个的地址:

通过监视窗口可以看到,参数i和arr[12]的地址是一样的,为什么会发生这样的情况呢?下面追秋给大家补充一点额外的小知识:

我们在创建变量的时候,变量本身会在内存中储存起来,而储存也是有规则的:在创建变量的时候,遵循的是从高地址向低地址创建,什么意思呢,就是说第一个创建的变量是放在内存中的高地址处,而接下来创建的变量则是储存在低地址处。我们用下面的这个图来解释一下:

 解释完之后我们开始下一个调试的讲解:F5和F9的联合使用,从功能上来看,就知道这两个调试功能是联合使用的,我们下面来看效果:

将之前的代码进行修改,使之可以跳过循环部分,我们重新开始调试:

我们先使用F9在return 0处设置一个断点,

然后按F5执行程序:

 显然,当按下F5时,程序会自动执行到断点处,不在循环部分停留。

下面是对于F10和F11的区分:

我们在这里使用一个新的函数:

我们先使用F10进行调试:

我们发现光标并未进入fun函数内部,直接在主函数中进行下一步的语句,并在终端执行了函数中的语句;

下面来看F11的调试过程:

 

可以看见,F11可以进入到函数内部进行逐语句的执行, 对于程序运行是一个比较详细的显示。

好了,今天的分享就到这里,大家可以在评论区留下那么的宝贵见解。

期待我们的下次相见!!!!

白白

 

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值