什么?听说你还不会VS的调试技巧!!!

前言

一、Debug与Release的介绍

1.Debug:

Debug版本称为调试版本,便于程序员调试。

2.Release:

Release版本称为发布版本,便于用户使用。

3.Debug与Release的差别:

①Release版本无法进行调试。
②相较于Debug版本而言,Release版本编译后产生的可执行程序的代码大小和运行速度都是最优的。如下图:

在这里插入图片描述

二、调试常用的快捷键

1.在调试之前,要将开发环境设置为Debug版本

在这里插入图片描述

2.常见快捷键

①:F9:创建与取消断点。
②:F5:开始调试,通常用于跳到(运行逻辑上的)下一个断点处。
③:F10:逐过程。一个过程可以是一条语句,也可以是一次函数调用。
④:F11:逐语句。每按一次执行一条语句。
需要注意的是,当遇到函数调用语句时,如果按F10,则直接完成一次函数调用;如果按F11,则可进入函数内部观察细节
⑤: Ctrl + F5: 直接执行代码,不调试(与F5区分开)
⑥:Ctrl + c:复制某行代码
⑦:Ctrl + v:粘贴某行代码
⑧:Ctrl + x:剪切某行代码

三、监视窗口与内存窗口的介绍

1.监视窗口:

可以查看变量的值。

2.内存窗口(难点):

①:可以查看变量在内存中的存储情况。变量在内存中是以二进制的形式存储的,但内存窗口是以十六进制的形式展现的。

在这里插入图片描述

②:一个16进制位可以用4个二进制位表示;一个int类型数据占4个字节;每个字节都有对应的地址。

(需要注意的是开始调试后,才能看到监视窗口与内存窗口。)

四、调试案例

在VS2022、X86、Debug 的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥?
#include <stdio.h>
int main()
{
 int i = 0;
 int arr[10] = {1,2,3,4,5,6,7,8,9,10};
 for(i=0; i<=12; i++)
 {
 arr[i] = 0;
 printf("hehe\n");
 }
 return 0;
 }
答:可能会死循环的打印hehe。i和arr都是局部变量,存储在栈区,在VS2022、x86、Debug环境下,栈区的使用习惯是先使用高地址,再使用低地址。

在这里插入图片描述

当i增加到12时,恰好发现arr[12]与i的地址相同,故当arr[12]变成0时,i也变成0了,于是陷入了死循环。

在这里插入图片描述

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值