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

文章目录

  • 1.VS上的Debug和Release
  • 2.调试快捷键
  • 3.监视和内存
  • 例子

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

1.VS上的Debug和Release

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

8. VS 如何调试(debug)与监视代码(快乐动图版)_第3张图片
天哪,调试有那么多选择,我该如何是好呢?别急,让我一一和你细细道来。
一般,我们调试是要和监视窗口一起,才能将调试视觉化。
来吧,展示!

2.调试快捷键

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

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

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


-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
以上是F10讲解,再看F9和F5
F5开始调试 // F9设置断点和取消断点(在代码旁边按一下出现小红点说明创建了断点,再按一下会取消断点)
两个快捷键一般一起出场,设置断点,按下F5,可以让程序执⾏到想要的位置并暂停执⾏,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执⾏细节

-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
以上是F9和F5的讲解,再看CTRL + F5
当我们不想调试了,想知道代码是不是可以正常运行了,咱们直接CTRL + F5:开始执⾏不调试,让程序直接运⾏起来⽽不调试。
-----------------------------------------------------------这是一条分割线------------------------------------------------------------------------------------ -
接下来我们了解怎么打开监视窗口和内存窗口,这可以让我们受益匪浅。

3.监视和内存

监视8. VS 如何调试(debug)与监视代码(快乐动图版)_第5张图片
内存

我们想看arr数组内存就在地址快那里输入arr,改变列数可以让内存看的直观,
想看num,i,ch地址,就要输入&num或&i或&ch,运用取地址符&
8. VS 如何调试(debug)与监视代码(快乐动图版)_第6张图片

例子

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

出现死循环了。
先来一波调试过程
8. VS 如何调试(debug)与监视代码(快乐动图版)_第7张图片
我们发现,当 i>9时,还会赋值给arr[i],说明已经越界了,而且到i=12的时候,我们发现,i的值和arr[12]的值一样,所以当arr[12]被赋值为0时,i 也被赋值为0,说明i和arr[12]地址一样,不信,给你展示一下它们的内存地址。
8. VS 如何调试(debug)与监视代码(快乐动图版)_第8张图片
8. VS 如何调试(debug)与监视代码(快乐动图版)_第9张图片

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

你可能感兴趣的:(c语言,笔记,经验分享,开发语言)