VS_调试技巧

1. 什么是bug

bug的本意是“昆虫”或“虫子”,现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞
bug来源:
“Bug” 的创始人格蕾丝·赫柏(Grace Murray Hopper),她是一位为美国海军工作的电脑专家,1947年9月9日,格蕾丝·赫柏Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部⼀组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶带贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“bug”这个说法⼀直沿用到今天。

2. 什么是调试

当我们发现程序有问题的时候,需要找出问题,并解决问题,这个找出问题的过程就叫做调试,英文叫debug(消灭bug的意思)
当我们在测试程序发现结果不符合预期时,我们就需要调试首先要找到问题所在的位置,然后修正代码,最后重新测试。

3. Debug和release

在这里插入图片描述
相信大家在VS上编写代码时,会看到DebugRelease两个选项,那么分别是什么意思呢?

  • Debug通常称为调试版本。它包含调试信息,并且不作任何优化,便于程序员调试程序
  • Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好的使用。

同一段代码,编译生成的可执行文件的大小,release版本比debug版本要小。

4. 调试须知

4.1 环境准备

在这里插入图片描述
调试时,需要一个支持调试的开发环境,在VS上设置为Debug,如上图。

4.2 调试快捷键

调试时最常用的几个快捷键如下:

  • F9创建断点和取消断点
    我们可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂停执行,接下来我们就可以使用F10F11这些快捷键,观察代码的执行细节
    条件断点:满足条件,才可以触发断点。
  • F5启动调试,经常用来直接跳到下一个断点处,一般和F9配合使用。
  • F10逐过程,通常用来处理一个过程,一个过程可以是一次函数调用(直接完成调用,不进入函数),也可以是一条语句。
  • F11逐语句,每次执行一条语句,可以进入函数内部
  • Ctrl + F5开始执行不调试,如果你想让程序直接运行而不调试就可以直接使用。

VS 快捷键了解:添加链接描述

5. 监视和内存观察

调试过程中,我们要观察代码执行过程中上下文环境中的变量的值,有哪些方法呢?
注:这些观察的前提条件一定是开始调试后再观察
例:

#include<stdio.h>

int main(){
	int arr[10] = { 0 };
	int n = 20;
	char c = 'h';
	
	int i = 0;
	for(i = 0;i < 10;i ++){
		arr[i] = i;
	}
	
	return 0;
}

5.1 监视

开始调试后,在菜单栏中【调试】->【窗口】->【监视】,打开任意一个监视窗口,输入想观察的对象即可。操作如下方:

首先,在想观察的位置用F9打上断点(这样才能暂停程序执行,进而看见观察对象的变化,不然程序会直接执行结束),用F5开始调试

在这里插入图片描述
然后,打开监视窗口

在这里插入图片描述
最后,添加观察对象,用F10逐过程)或F11逐语句)一步一步执行下去。

在这里插入图片描述

5.2 内存观察

如果监视窗口看的不够仔细,我们还可以观察变量在内存中的存储情况,在菜单栏中【调试】->【窗口】->【内存】。操作如下:
在这里插入图片描述
打开内存窗口后,可在红框里输入观察对象的地址(如上方代码中:&c、&n、arr)

在这里插入图片描述
补充:内存窗口说明

在这里插入图片描述

6. 编程常见错误归类

6.1 编译型错误

编译型错误一般是语法错误。这类错误一般看错误信息就能找到一些蛛丝马迹,双击错误信息也能初步跳转到代码错误的位置或附近。编译错误会随着我们对语言掌握熟练程度的提升而减少。

例:在这里插入图片描述

6.2 链接型错误

看错误提示信息,这些错误通常涉及符号定义和引用的问题,错误情况一般如下:

  • 标识符名不存在
  • 拼写错误
  • 头文件没包含
  • 引用的库不存在

6.3 运行时错误

这类错误是一般编译时觉察不到的,是最不易改正和发现的,如数组越界、函数递归时栈溢出等,需要我们逐步调试来定位错误,解决错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值