前言
一、Debug与Release的介绍
1.Debug:
Debug版本称为调试版本,便于程序员调试。
2.Release:
Release版本称为发布版本,便于用户使用。
3.Debug与Release的差别:
①Release版本无法进行调试。
②相较于Debug版本而言,Release版本编译后产生的可执行程序的代码大小和运行速度都是最优的。如下图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7350671f31ca401c92b07b4888d7dac3.png#pic_center)
二、调试常用的快捷键
1.在调试之前,要将开发环境设置为Debug版本
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6f5e71165cfb442f8b3018457002a20d.png)
2.常见快捷键
①:F9:创建与取消断点。
②:F5:开始调试,通常用于跳到(运行逻辑上的)下一个断点处。
③:F10:逐过程。一个过程可以是一条语句,也可以是一次函数调用。
④:F11:逐语句。每按一次执行一条语句。
(需要注意的是,当遇到函数调用语句时,如果按F10,则直接完成一次函数调用;如果按F11,则可进入函数内部观察细节)
⑤: Ctrl + F5: 直接执行代码,不调试(与F5区分开)
⑥:Ctrl + c:复制某行代码
⑦:Ctrl + v:粘贴某行代码
⑧:Ctrl + x:剪切某行代码
三、监视窗口与内存窗口的介绍
1.监视窗口:
可以查看变量的值。
2.内存窗口(难点):
①:可以查看变量在内存中的存储情况。变量在内存中是以二进制的形式存储的,但内存窗口是以十六进制的形式展现的。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dc1c750e730e4c198e81a1d1479b6e3d.png#pic_center)
②:一个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环境下,栈区的使用习惯是先使用高地址,再使用低地址。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f8d3702ef6c49f997e5a1dd1df98f77.png)
当i增加到12时,恰好发现arr[12]与i的地址相同,故当arr[12]变成0时,i也变成0了,于是陷入了死循环。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2980cfa24af744d6bff932eefb218b9c.png#pic_center)