调试技巧
- 一.简介
- 1.调试是什么
- 2.调试的基本动作
- 3.Debug和Rlease的介绍
- 二.调试介绍
-
- 三.调试时看当前信息
-
- 四.多多动手调试
一.简介
1.调试是什么
![在这里插入图片描述](https://img-blog.csdnimg.cn/4bad03f4e6494f1396992e8c024b7ed2.png)
调试本身是一个动作,是用来除去错误的动作
2.调试的基本动作
1.发现程序错误所在
主要有三类人发现bug
1.程序员自己
2.测试人员
3.用户
2.以隔离消除等方式对错误进行定位
顾名思义,就是先找到错误的代码在哪一部分,再对这段代码进行检测
3.确定错误产生的原因
4.提出纠正错误的解决方法
5.对错误进行修改和测试
3.Debug和Rlease的介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/72c60f32490e4bb68fb1fff9b8c8a719.png)
在我的vs里有这样的格式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b8a1a11f25624cc881ec67344675691a.png)
具体的区别就是Debug的模式是程序员自己用的版本,里面包含各种调试信息,程序员可以在里面进行调试
![在这里插入图片描述](https://img-blog.csdnimg.cn/0623f2ede9694fa0ae2c7bc6eca5440a.png)
Rlease版本就是用户使用的版本,不包含调试信息,所以不能调试,但因此它占的内存会更小,更有利于发布
ps:这里补充一个小知识,其实vs并不是编译器,而是被叫做IDE(集成开发环境)(集编译器和调试器为一体)
二.调试介绍
1.调试环境准备
调到Debug模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/e517eb236e8745b38fb9d91e56a38ff8.png)
2.快捷键的使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/39bfec8f1fbe43d49bc5087199d4facb.png)
F5
启动调试,常用来跳到下一个断点处
F9
创建断点和取消断点
断点的重要作用,可以在程序的任意位置设置断点
这样就可以使得程序在想要的地方停下来,继而一步步执行下去
断点就是让程序停下来的点
这两个键经常一起使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/63d74871cbc1427692659ac771f79096.png)
我在123行按一下F9,出现了一个 红点,这就是断点,再按F5,看下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/8be8894729f94fe7989bc30cd86b4b66.png)
这里先叫我输入,因为前面有个scanf函数,如果没有这个scanf,那么按F5的话就会直接跳到这个红点位置
ps:断点可以设置多个,依次按F5会依次跳到下一个断点
![在这里插入图片描述](https://img-blog.csdnimg.cn/03f0dc8d715d4e768527b4c00007cb80.png)
F10
逐过程,通常处理有个过程,一次过程可以是一个函数调用或者一条语句
F11
逐语句,就是每次都执行一条语句,但这个快捷键可以帮助我们进入函数内部(这个功能是最常用的)
CTRL+F5
开始执行不调试,也就是我们常用的运行程序的键位
F10的使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/5565cf86a4e34d6fa30d7ce0f85390a3.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2daa60b560cd40019dcdc2e48938b07b.png)
与F5不同的是,F5是直接跳到断点处,而F10是一条一条的执行
F11的使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/4276799adeae4cbf9df7a812bad93011.png)
使用F11就可以直接进入menu函数内部,而用F10会直接跳到retrn 0
当然我们使用F5和F9组合也可以进入函数内部,只需要将断点放在函数内部就可以了
![在这里插入图片描述](https://img-blog.csdnimg.cn/dcebcec186a94040a7b1d4297f77d1cc.png)
三.调试时看当前信息
1.查看临时变量的值
首先打开监视窗口
![在这里插入图片描述](https://img-blog.csdnimg.cn/eba698cc33514a0caa13cb3cb696239c.png)
记得看窗口时一定要先调试(按F5或F10)起来,不然是无法看到的
![在这里插入图片描述](https://img-blog.csdnimg.cn/c50ef76bdf464a23a6aab70a185e18f1.png)
随便打开一个调试窗口,然后我们向里面输入我们要查看的变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/bfb01a95b4d64527973b72087cee4d70.png)
这里还没有初始化,,所以里面放的是随机值
![在这里插入图片描述](https://img-blog.csdnimg.cn/b217663ed03149eabad957ea7b84e24f.png)
按F10向下走,这时就可以看到x,y被初始化了,接下来我们再添加z监视,再按一下F10
![在这里插入图片描述](https://img-blog.csdnimg.cn/cac76fdd1a6a437c8fbc15796760206e.png)
可以看到直接完成了函数得出了z的值
如果我们检测数组会怎样呢
![在这里插入图片描述](https://img-blog.csdnimg.cn/59443edeaf8b4164b7a43260f49e6d55.png)
可以看到我们依然可以看到arr的所有元素,那么我们如果进入函数呢,按F11进入函数
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e49e50664e549e593ee0224a3169cb2.png)
可以看到这里只显示了第一个元素,那我们如何显示所有元素呢
![在这里插入图片描述](https://img-blog.csdnimg.cn/fe06a5053c214b3992efaf5400050337.png)
其实很简单,只需要再数组后面加个,再加上数字,就可以让你看到几个元素啦
2.查看内存
![在这里插入图片描述](https://img-blog.csdnimg.cn/1b2a88aa8e504a10a62b2e057eaf0658.png)
如果我们想看a的地址那么我们只需要&a就可以了
![在这里插入图片描述](https://img-blog.csdnimg.cn/0dbd6016ab954e7bb5d9f594d2f883ad.png)
然后按回车,里面出现的值就是a的地址啦
![在这里插入图片描述](https://img-blog.csdnimg.cn/e6e80bbeb15b492dae1b062a16816ae4.png)
需要注意的是地址在编译器中其实是二进制放的,但为了方便看,所以用16进制表示
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf81c77309b642db82e615163194319d.png)
这里面的数就是a的值,其实它在内存中也是二进制放的,但为了方便也是16进制显示的。a在16进制中就是10
这样其实不好看,因为a是int类型,只有32位2进制也就是8位16进制,所以在后面全放的是c(至于为什么是c而不是其他值就要看函数堆栈啦),我们不需要看后面的数,所以我们可以调整窗口让其只显示前8位16进制数,也就是4列
![在这里插入图片描述](https://img-blog.csdnimg.cn/eefec0a633794a509f88d7dea85b4b3f.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8d480797af5141d7b2a4fb28b0a7cd42.png)
同理我们可以看看b的内存,在16进制中c就是12
![在这里插入图片描述](https://img-blog.csdnimg.cn/dcaa710f42a641f98fc04319d107de0f.png)
四.多多动手调试
调试是非常重要的
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e9538dc274942899648cf19323939bc.png)
好啦,这里就介绍到这里啦,当然vs的调试功能是很强大的,其他窗口像是反汇编,堆栈…有兴趣的朋友可以自己看看啦
![在这里插入图片描述](https://img-blog.csdnimg.cn/b223b78728e944a9ae01132e0185890d.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)