VS实用调试技巧

一、什么是bug?

bug本意是“昆虫”或“虫子”,现在指的是程序漏洞(在电脑系统或者程序中一些未被发现的缺陷或者问题)

小知识:

“Bug” 的创始⼈格蕾丝·赫柏(Grace Murray Hopper),她是⼀位为美国海军⼯作的电脑专家,
1947年9⽉9⽇,格蕾丝·赫柏对Harvard Mark II设置好17000个继电器进⾏编程后,技术⼈员正在进⾏整机运⾏时,它突然停⽌了⼯作。于是他们爬上去找原因,发现这台巨⼤的计算机内部⼀组继电器的触点之间有⼀只⻜蛾,这显然是由于⻜蛾受光和热的吸引,⻜到了触点上,然后被⾼电压击死。所以在报告中,赫柏⽤胶条贴上⻜蛾,并把“bug”来表⽰“⼀个在电脑程序⾥的错误”,“Bug”这个说法⼀直沿⽤到今天。
 
 

二、什么是debug(调试)?

所谓debug就是消灭bug的意思。中文就是调试

想要调试一个程序,首先是承认出现了问题

之前,我在做一道简单的题目的时候,怎么提交都是失败,搞了好几次,我也没耐心了,发给我的学姐,结果你猜怎么着,我刚发过去,定眼一看,找到虫子在哪里了,感觉满不好意思的

 

 

为什么我之前一直发现不了,说好听些就是潜意思认为我没有错,而检查时带着这个潜意思,说不好听的,就是死犟死犟的。所以调试一个程序首先是你要承认出现了问题

然后我们需要用各种各样的手段去定位问题的位置,可能是通过逐个过程的调试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,重新测试。

 

三、Debug和Release 

在VS编写代码的时候就可以看到有  debug  和  release  两个选项,这两个选项分别是什么意思呢?

  • Debug(调试版本):包含完整调试信息,无优化,便于程序员调试代码,生成的可执行文件较大(如 39KB)。
  • Release(发布版本):经过优化,去除调试信息,代码体积小、运行速度快,适合交付用户使用,生成的文件较小(如 9KB)。

 

从同⼀段代码,编译⽣成的可执⾏⽂件的⼤⼩,release版本明显要⼩,⽽debug版本明显⼤。

 

 

四、VS调试快捷键

 

那程序员该怎么调试代码呢?

 

1.环境准备

说的很专业啊,其实就是把VS上设置为Debug

2.调节快捷键

调节几个常用的快捷键:

F9:创建断点和取消断点

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

F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调⽤,或者是⼀条语句。
 
F11:逐语句,就是每次都执⾏⼀条语句,但是这个快捷键可以使我们的执⾏逻辑进⼊函数内部。在函数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。
 
CTRL + F5:开始执⾏不调试,如果你想让程序直接运⾏起来⽽不调试就可以直接使⽤。

 

 

五、监视和内存观察

在调试的过程中我们,如果要观察代码执⾏过程中,上下⽂环境中的变量的值,有哪些⽅法呢?
这些观察的前提条件⼀定是开始调试后观察,⽐如:

 

 

温馨提示:

想要找到以下的窗口,需要先创建断点并开始调试后才能找到

                                                        没有开始调试 也没有创建断点时

 

 

在合适的位置,按F9即可创建断点,按F5即可开始调试也可点开菜单中的调试

                                                             创建断点并开始调试后

 

 

1.监视窗口

 

开始调试后,在菜单栏中【调试】->【窗⼝】->【监视】,打开任意⼀个监视窗⼝,输⼊想要观察的对象就⾏。

 

 

在监视窗口观察:

 

2.内存窗口

在【调试】->【窗⼝】-> 【内存】打开内存窗口,观察变量在内存中的存储情况:
 
 
 
 
在内存窗口观察:
 
 
 

六、常见的编程错误

 

1.编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝⻢迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。编译错误,随着语⾔的熟练掌握,会越来越少,也容易解决。
 
 

2.链接型错误

看错误提⽰信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。⼀般是因为
 
•  标识符名不存在
•  拼写错误
•  头⽂件没包含
•  引⽤的库不存在

 

 

3.运行时错误

运⾏时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运⾏时问题。
 
 
 
 
 
 
 
 

七、实战演练

 

题目内容

求1!+2!+3!+4!……+10!的和,请看下面的代码

代码确实可以运行,但是得不到我们想要的结果,请调试找一下问题

首先,计算机是不会出现问题的,得不到我们想要的结果,说明  代码有问题   这个时候不要犟老老实实找bug,解决问题。

那么,该怎么找bug呢?

找bug的方式:

1.设置好断点,开始调试照着程序走

2.看看程序有么有按照我们预期的方式走

3.如果没有按照预期走说明有问题

准备好监视窗口,观察运行过程中 i n ret  sum的值是否符合预期

发现不符合预期了,问题浮现了

 
  • 观察ret的值,发现其在每次外循环中未重置为 1,导致累乘结果错误
  • 修复:在每次外循环开始时将ret重置为 1。
 
 
 
 

 

结语:

分享一下,我老师的一些话

 

调试过程中,要做到⼼中有数,也就是程序员⾃⼰⼼⾥要清晰的知道希望代码怎么执⾏,然后再去看代码有没有按照我们预定的路线在执⾏。
   调试    是需要反复去动⼿练习的,调试是可以增加程序员对代码的理解和掌控的,掌握了调试的能⼒, 就能看到本质,就像能给程序做B超⼀样,对程序内部⼀览⽆余。
 
 
 
 
 
 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值