文章目录
一、什么是调试?
调试(Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。
二、Debug和Release版本介绍
- Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
- Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
-
Debug版本可以进行调试,而Release版本不能调试。
三、调试的常用快捷键,如何启动调试
F5:启动调试,并直接跳到下一个断点处。(一般开始调试按F10或F11)
CTRL + F5:开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。
F9:创建断点和取消断点。
Ctrl+Shift+F9:删除全部断点。
F10:逐过程进行调试,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)。
一般开始调试代码,按下F10或F11。
- F10和F11的区别?
- 按下F10,从主函数第1条代码开始调试,再按F10执行下一条语句,如果下一条语句是一次函数调用,则
不进入函数内部
,直接把函数的结果运行出来,这个过程叫做逐过程调试。- 按下F11,从主函数第1条代码开始调试,再按F11执行下一条语句,如果下一条语句是一次函数调用,则
进入函数内部
,把函数里的代码也一条一条的执行,执行完成后,返回到调用函数的地方。这个过程叫做逐语句调试,即每条语句都执行。
四、启动调试后,如何查看局部变量的值
- 在菜单栏依次找到调试-窗口-监视-监视(1)(2)(3)(4)任意打开一个即可。
- 打开之后默认是这样的,点击输入你想要查看的局部变量,回车确定。
-
输入之后是读取显示内存的,因为语句还没有执行到创建arr数组的那条语句。按下F10走下一条语句。
-
多次按下F10, 可以看到局部变量的值。此时代码执行到第12行。
- 如果遇到函数,按下F10会直接把函数当成一条语句执行,因为F10是逐过程调试,一个过程可以是一条语句也可以是一次函数调用。
- 想进入函数内部,就要按下F11, F11是逐语句调试,他会进入到函数内部,并把函数体的代码一条一条的执行。
4.1 启动调试后,二维数组的形参如何查看?
我们发现实参arr1传给形参arr, 在监视窗口查看arr变量,但是只能看到前5个元素,也就是第一行的元素,那么如何查看二维数组中所有的元素呢?
- 我们在变量arr后面紧接着输入,和二维数组的行数,就能显示二维数组中所有的数据了。
五、启动调试后,如何查看内存中的数据
5.1 查看变量在内存中的存储
- 在菜单栏依次找到调试-窗口-内存-内存(1)(2)(3)(4)任意打开一个即可。
- 打开过后是这样的
- 框架介绍
- 查看内存中变量的值
下面链接是:变量在内存中的存储形式的详细介绍
整型数据和浮点型数据在内存中的存储格式
#include <stdio.h>
int main()
{
int a = 20;
//00000000 00000000 00000000 00010100 -- 原码,反码,补码
//16进制表示: 0x00 00 00 14
//在内存中小端存储:14 00 00 00
return 0;
}
- 我们在地址栏中输入a的地址(&a),右侧修改展示的列数为4列。我们看到,变量a的地址是0x0000000000000004, 内容是?? ?? ?? ??。这是因为a变量还没有创建,按下F10/F11创建变量a。
- 我们发现变量a的地址变成了0x000000100390F934, 内容变成了14 00 00 00。内容和我们计算的结果是一致的。地址为什么变化了呢?因为刚开始调试,未执行到int a = 20;这条语句,变量a还没有创建,编译器未给变量分配地址,刚开始的地址是随机值。
5.2 查看数组在内存中的存储
- 我们在点击第19行,按下F9, 打个断点,在按下F5调试运行到第19行。此时整型数组arr已经创建,arr里面存放的是整型数据,并赋予了值,1,2,3… … 8,9,10。
如果对存储的数据有不理解的地方,可以查看数据在内存中的存储格式的详细解释
整型数据和浮点型数据在内存中的存储格式
总结
以上就是在VS中经常用到的调试技巧。