如何正确使用VS?

1.什么是bug?

1.什么是bug?
bug的意思是**“虫子”或“昆虫**”,一般是指在电脑系统或程序中,隐藏在系统或程序中的一些缺陷或漏洞,简称——程序漏洞

它是由美国计算机科学家“格蕾丝·赫柏(Grace Murray Hopper)”发明的。

他在一次工作中,发现马克二号(Mark Ⅱ)计算机出现故障不能运行,最终发现是一只飞蛾飞进了实验室,夹在继电器中。后来格蕾丝把这个排错过程记录到笔记本中,把飞蛾的标本也贴在那里,后来bug (小虫) 和debug (除虫)就成了计算机领域中找错的专用词汇,一直沿用到今天。
在这里插入图片描述

2.什么是调试,调试的重要性

(1)什么是调试?

当一个程序在执行的过程存在问题时,我们就需要去寻找问题,那寻找的这个过程呢,我们就叫——调试,调试的英文名叫debug(消灭bug)。

(1)调试的重要性*

学会调试是合格的程序员的基本技能,这是一个发现问题,并能精准的找到问题所在之处,然后通过调试来决解问题。

3.debug和release

Debug称为调试版本,它仅包含调试信息,不做任何的优化,可以直接调试。

Release称为发布版本,它比Debug版本的使用效率更高,能进行各种优化,这就使得程序的代码大小和运行的速度效率比Debug更高,这更适合程序员对程序进行测试,无需包含调试信息。
在这里插入图片描述

​​

看到Debug和Release相比,我们很明显的可以看出区别,Debug可以调试,而Release不能调试信息

4.VS常见的调试快捷键

Ctrl + Alt + B——它的作用是可以在程序的任意位置设置断点,结合F11,F10来观察代码的细节
Ctrl + Alt + A——异常设置
Ctrl + Alt + F2——显示诊断工具
Ctrl + Shift + D,K——任务
Ctrl + Shift + D,S——并行堆栈
Ctrl + Alt + V,L——局部变量
Ctrl + Alt + I——即时
Ctrl + Alt + C——调用堆栈
Ctrl + Alt + H——线程
Ctrl + Alt + U——模块
Ctrl + Alt + Z——进程
Ctrl + Alt + D——反汇编
Ctrl + Shift + Alt + D
——诊断分析
Ctrl + Alt +G——寄存器

Ctrl + Shift + F9——删除所有断点
Shift + F9——快速监视
Shift + F5——停止调试
Ctrl + Shift + F5——重新调试
Shift + Alt + F2——性能探查器
Alt + F2——重启性能探查器
Ctrl + Shift + B——生成解决方案
Ctrl + Shift + S——全部保存
Ctrl + X——剪切
Ctrl + C——复制
Ctrl + D——复制
Ctrl + V——粘贴
Ctrl + A——全选
Ctrl + Shift + V——显示剪切板历史记录

Ctrl + Alt + B——它的作用是可以在程序的任意位置设置断点,结合F11,F10来观察代码的细节
条件断点:——满足条件,才能触发断点

F5——启动调试,并且可以用来跳到下一个断点去(配合F9使用)

Ctrl + F5: ——直接 运行程序但是不调试

Shift+F5:——停止调试

F9:——取消断点和启用断点

Ctrl+F9——停止断点

F10:——逐过程用来处理每一个过程,一个过程可以是一次函数调用,或者是一条语句

Ctrl+F10——运行到光标处

F11:—— 逐语句,再每执行一条语句,可以让我们执行的逻辑进入到函数内部观察细节

5.调试查看程序当前信息

5.1监视

开始调试之后,才能看到监视(共四个监视,点其中一个即可)
**
在这里插入图片描述

在这里插入图片描述

5.2内存

共四个内存,点其中一个即可
在这里插入图片描述
在这里插入图片描述

5.4反汇编

在这里插入图片描述

5.5寄存器

在这里插入图片描述
在这里插入图片描述

6.调试的实例

(1)求1!+2!+3!……10!的阶乘

错误的代码——与预期的结果不同
#include<stdio.h>

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

与预期的结果不同
在这里插入图片描述

正确
#include<stdio.h>

int main() {
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 3; n++)
	{
			ret *= n;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}
> 

预期结果在这里插入图片描述

(2)
这是在vs2022——Debug——x64版本的环境下编译的结果

错误的代码——程序会死循环
#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;
}

调试之后看到的结果
在这里插入图片描述

调试上面程序的内存布局如下:
1.栈区默认先使用高地址,再到低地址,那我们可以看到变量i的地址是较大的,而arr数组的地址事小于i的地址
2.数组在内存中的存放遵循随下标的增长,地址由低到高变化的。
在这里插入图片描述

可以看到调试的重要性,只有调试才能观察到程序内部执行 的细节,
注意:栈区默认先使用高地址,再到低地址这样一个空间。在vs切换到x64,这个使用顺序是相反的,Release版本中也是一样的

7.编程常见错误的类型

7.1编译型错 误

编译型错误一般都是语法错误,这类错误一般看错误信息就能看找到一些蛛丝马迹,双击错误信息也能初步 跳转到代码错误的地方或附近
在这里插入图片描述

7.2链接型错误

看到错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在,一般是因为
@@标识符名不存在
@@拼写错误
@@头文件没包含
@@引用的库不存在

在这里插入图片描述

7.3运行时的错误

运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时的问题(预期的结果错误)

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值