Visual Studio调试的技巧

1.什么是bug?

bug:程序漏洞,也就是程序中存在的问题。

2.什么是调试?

当我们发现了程序中的问题后就会解决问题,前提是要找到问题,那么进行**调试(debug)**以此来找到问题。

3.debug 和 release

在vs里编写代码时就有 debug 和 release 两个选项:

Debug 通常称为调试版本,包含调试信息,但是不会对代码进行优化,可以进行调试的。

Release 称为发布版本,是会对代码自动进行代码优化的,不可以调试,当程序员写好程序后并对程序进行测试,测试完成后就会发布release版本,面向用户使用。没有包含调试信息,所以是不可以进行调试的。

从上面我们就可以知道 debug 版本要比 release 版本要大得多,就是因为debug里面包含调试信息

4.vs调试技巧的快捷键

4.1准备环境

环境就是 vs 的 debug 版本

4.2调试常用的快捷键

**F9:**创建断点和取消断点

断点的作用是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂停执行,之后我们就可以使用 F10、F11 更加深层次的观察代码的执行细节

条件断点:满足这个条件,才触发断点

在下面输入条件:

**F5:**启动调试,经常用来直接跳到下一个断点处,一般是和F9配合使用。

**F10:**逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,也可以是一条语句。

F11: 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们进入函数内部,更加仔细地观察语句,此时就必须使用 F11,如果使用 F10 ,直接完成函数调用。

**CTRL+F5:**开始执行不调试。

5.监视和内存观察

5.1监视

当我们想明白每一个变量变化的每一个过程的时候,我们就可以选择监视,但是监视的前提是一定要调试才可以监视到每一个变量的变化。

上面的监视窗口任意选一个就行,然后按 F10 就可以观察到了:

上面经历五次循环之后的数组内容

5.2 内存

如果想看数组arr、变量num、变量a的地址可以在地址栏那里写入:arr(数组名本来就是地址) &num &a

6.调试举例1

求 1!+2!+3!+4!+...10! 的和,我这里的代码写的是 3 是为了方便检查写的代码是否正确:

(你们运行的时候可以改动一下)

cs 复制代码
int main()
{
	int n = 3;
	int i = 0;
	int sum = 0;
	for (n = 1; n <= 3; n++)
	{
		int ret = 1;
		for (i = 1; i <= n; i++) 
		{
			
			ret = ret * i;
		}
		sum +=ret;
	}
	
	printf("%d\n", sum);
	return 0;
}

7.调试举例2

在VS2022、X86、Debug 的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥?

cs 复制代码
#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;
}

当我们在上面要求的环境中运行时就会发现:

这个时候就要调试看看到底怎么回事?

其实调试到这里我们就可以发现这里是i的地址,当我们再按一次F10时,i 明明该为13了,但是 i 就被初始化为0了,所以才会进入死循环。

本质原因:

栈区内存中习惯是从高地址开始使用,因为先创建的是变量 i 的地址,所以 i 的地址比数组 arr 的地址高,而又因为数组在内存当中的存放是下标越大的,地址越高,也就是从低地址开始使用的,本来数组就越界了,所以有可能数组就会覆盖到 i ,所以进入死循环。而 i 和 arr刚好间隔两个整形的空间,这完全取决于环境,每次的变量在内存的分配都是由编译器指定的,所以演示这道题时规定了环境。

如果将 i 和 arr 初始化的顺序交换一下,就不会出现这种情况了

或者是改成 release 环境下,也不会出现死循环,这是因为 release 会自动地优化代码,但是会报错,因为数组越界了

8.变成常见的错误

8.1 编译型错误:

检查语法的错误------最简单的

8.2链接型错误:

声明自己写的同文件没有写对呀,等等~

8.3运行时错误

前面的两步都没有报错,但是运行的结果和自己预期的结果不一样,这个是最麻烦的,这个时候就要进行调试了

相关推荐
寒山李白9 分钟前
VSCode下载安装指南
ide·vscode·开发工具
❆VE❆1 小时前
【工具分享】vscode+deepseek的接入与使用
ide·vscode·编辑器·ai编程·工具·deepseek
呵呵哒( ̄▽ ̄)"4 小时前
VScode 运行C++ (经典hello world!)
ide·vscode·编辑器
先知-旭日东升7 小时前
VSCode中操作gitee
ide·vscode·gitee
背着代码的蜗牛17 小时前
Pycharm远程开发注意事项
ide·python·pycharm·ssh·远程工作
selfsuer20 小时前
统信UOS中使用Vscode编程
ide·vscode·编辑器
Q_w774220 小时前
配置 VSCode 的 C# 开发环境
ide·vscode·c#
cpp加油站21 小时前
无需qt-creator,使用Trae从0到1生成qt的开发、构建、调试环境
开发语言·ide·qt
J不知道ava1 天前
在idea里开发第一个Servlet
java·ide·intellij-idea
LuXi_foryou1 天前
Android Studio运行错误:`Could not find method google() for arguments []` 解决方法
android·ide·android studio