1. 什么是bug
bug的本意是“昆虫”或“虫子”,现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。
bug来源:
“Bug” 的创始人格蕾丝·赫柏(Grace Murray Hopper),她是一位为美国海军工作的电脑专家,1947年9月9日,格蕾丝·赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部⼀组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶带贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“bug”这个说法⼀直沿用到今天。
2. 什么是调试
当我们发现程序有问题的时候,需要找出问题,并解决问题,这个找出问题的过程就叫做调试,英文叫debug(消灭bug的意思)。
当我们在测试程序发现结果不符合预期时,我们就需要调试,首先要找到问题所在的位置,然后修正代码,最后重新测试。
3. Debug和release
相信大家在VS上编写代码时,会看到Debug和Release两个选项,那么分别是什么意思呢?
- Debug通常称为调试版本。它包含调试信息,并且不作任何优化,便于程序员调试程序
- Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好的使用。
同一段代码,编译生成的可执行文件的大小,release版本比debug版本要小。
4. 调试须知
4.1 环境准备
调试时,需要一个支持调试的开发环境,把VS上设置为Debug,如上图。
4.2 调试快捷键
调试时最常用的几个快捷键如下:
- F9:创建断点和取消断点。
我们可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂停执行,接下来我们就可以使用F10,F11这些快捷键,观察代码的执行细节。
条件断点:满足条件,才可以触发断点。 - 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 运行时错误
这类错误是一般编译时觉察不到的,是最不易改正和发现的,如数组越界、函数递归时栈溢出等,需要我们逐步调试来定位错误,解决错误。
标签:技巧,错误,VS,内存,观察,断点,bug,调试 From: https://blog.csdn.net/2403_82882218/article/details/141089345