8. VS 如何调试(debug)与监视代码(快乐动图版)


相信我们写代码是为了写bug,那我们要如何修饰这些bug,让它变得更加坚不可摧呢?
开玩笑哈,言归正传,我们确实不能保证写出来的所有代码都没有bug,当出现了bug,我们可以运用vs 调试和监视的功能,找出其中的逻辑和过程中出现的error,进行debug,让代码不再ugly。
废话不多说,上干货。

1.VS上的Debug和Release

在这里插入图片描述
在这里插入图片描述
debug江湖人称调试版本
编译器编译时会增加一些调试信息,但是基本不会对其进行优化
release是发布版本,不能调试,该版本是要提供给各位客官,所以其必须没有bug。测试人员就是最后一个把关。
一般编译器会进行大量的优化,删除无用的代码,指令的次序调整等,让其速度更快。
2.调试快捷键进行Debug

在这里插入图片描述
天哪,调试有那么多选择,我该如何是好呢?别急,让我一一和你细细道来。
一般,我们调试是要和监视窗口一起,才能将调试视觉化。
来吧,展示!

2.调试快捷键

先看F11逐语句调试快捷键,可以直接进入进⼊函数内部,比如动图中Sum函数。
我们设置窗口的监视可以让我们观察变量的变化过程,如果我们出现bug,便可以从中找到问题。
在这里插入图片描述
在这里插入图片描述

在调试过程中,要一直按F11,才能一直调试,遇到要输入的,输入完后记得回车健然后F11继续走起调试。
-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
以上是F11讲解,再看F10
F10逐过程调试快捷键,它有个不好的点,会直接完成函数调⽤,我们观察不到函数调用里面的细节。

在这里插入图片描述
-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
以上是F10讲解,再看F9和F5
F5开始调试 // F9设置断点和取消断点(在代码旁边按一下出现小红点说明创建了断点,再按一下会取消断点)
两个快捷键一般一起出场,设置断点,按下F5,可以让程序执⾏到想要的位置并暂停执⾏,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执⾏细节
在这里插入图片描述
-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
以上是F9和F5的讲解,再看CTRL + F5
当我们不想调试了,想知道代码是不是可以正常运行了,咱们直接CTRL + F5:开始执⾏不调试,让程序直接运⾏起来⽽不调试。
-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
接下来我们了解怎么打开监视窗口和内存窗口,这可以让我们受益匪浅。

3.监视和内存

监视在这里插入图片描述
内存
在这里插入图片描述
我们想看arr数组内存就在地址快那里输入arr,改变列数可以让内存看的直观,
想看num,i,ch地址,就要输入&num或&i或&ch,运用取地址符&
在这里插入图片描述

例子

#include <stdio.h>
int main()
{
 int i = 0;
 int arr[10] = {0};
 for(i=0; i<=12; i++)
 {
 arr[i] = 0;
 printf("hehe\n");
 }
 return 0;
}

出现死循环了。
先来一波调试过程
在这里插入图片描述
我们发现,当 i>9时,还会赋值给arr[i],说明已经越界了,而且到i=12的时候,我们发现,i的值和arr[12]的值一样,所以当arr[12]被赋值为0时,i 也被赋值为0,说明i和arr[12]地址一样,不信,给你展示一下它们的内存地址。
在这里插入图片描述
在这里插入图片描述

它俩地址一样,说明最后i又要和arr[12]一样是0,所以又开始循环,则陷入死循环。
补充:栈区内存的使⽤习惯是从⾼地址向低地址使⽤的,所以变量i的地址是较⼤的。arr数组的地址整体是⼩于i的地址。
i和arr数组之间恰好空出来2个整型的空间,在不同的编译器下可能中间的空出的空间⼤⼩是不⼀样的。

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值