目录
一.什么是bug
二.调试介绍
三.调试的基本步骤
四.两个版本
五.具体举例
六.一些调试快捷键介绍
七.优秀代码要求
写程序时,我们经常会遇到程序无法运行的情况,这种时候,就是程序的某一处地方出现了漏洞,这个漏洞,就被称为bug.
关于为什么要称为bug,这还有一个故事.
以前计算机刚出现的时候,体型是非常大的,有一天,运行计算机的时候,科学家发现无法运行,经过一步步排查,终于发现罪魁祸首——一只飞蛾落在了计算机上,导致计算机无法成功运行.
至此,我们就把程序中的漏洞,称为bug(英文中为小虫子的意思).
二.调试介绍
写出bug是非常正常的一件事,但是能写出来Bug,我们也要学会发现哪里出了问题,这其实也是一个加深对自己程序理解的过程.
如果连自己程序如何运行都无法清楚,那更谈不上写更为优秀的代码了.
一名优秀的程序员是一名出色的侦探.需要懂得找出Bug.
而找出bug的方法就被称为调试.
(调试
(英语:
Debugging / Debug
),又称除错,是发现和减少计算机程序或电子仪器设备中程序
错误的一个过程.)
三.调试的基本步骤
1.发现程序错误的存在 (以隔离、消除等方式对错误进行定位)
lg.技巧有很多,调试技巧需要自己在写程序时有意识的积累,比如记住一些常用快捷键,隔离一部分代码,观察是否会导致结果的变化等等...
2.确定错误产生的原因
3.提出纠正错误的解决办法,对程序错误予以改正,重新测试
四.两个版本
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.
Release 称为发布版本,它
往往是进行了各种优化
,使得程序在代码大小和运行速度上都是最优
的,以便用户很好地使用.
PS:我们调试的时候,要记得设置为debug版本才可以进行调试.
五.具体举例
我们看上面这个程序,如果不进行调试,估计很大一部分人都会看出来,数组最多十个元素,下标最大为9,如果强行运行,则必然会程序崩溃,因为数组越界.
但可以指出来的是,程序并不会崩溃,但是会出现死循环打印hello的情况,这是为什么呢?
打开窗口,选择内存监视,同时监视变量i,会发现变量i=12时进入循环,然后会重新变成0.
为什么会出现这样的情况呢?我们在内存中也可以清楚认识到这点
i变量的空间和数组空间非常近,arr[12]和变量i的空间重合了,当对arr[12]重新赋值为0时,i也变成了0,于是导致了死循环.
如果不对程序进行调试,就很难发现这个问题,由此也可以发现调试的重要性和必要性.
六.一些调试快捷键介绍
F5
启动调试,经常用来直接跳到下一个断点处.
SHIFT+F5
停止调试
F9
创建断点和取消断点
断点
的重要作用,可以
在程序的任意位置设置断点
.
这样就可以
使得程序在想要的位置随意停止执行
,继而一步步执行下去.
CTRL+SHIFT+F9
删除所有断点(有时候设置了多个断点,就可以采用这个快捷键)
F10
逐过程
,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句.
F11
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑
进入函数内部
(这是最
长用的).
SHIFT+F11
这个快捷键可以使我们及时从函数内部跳出.
CTRL + F5
开始执行不调试,如果你想让程序
直接运行起来而不调试
就可以直接使用.
总结规律:大部分快捷键,加了shift键,就进行相反的操作.
相关补充:(编写程序的一些快捷键)
CTRL + 单击 选中这个单词
CTRL + 左右单击 一次可以移动这个单词
CTRL + SHIFT + L(line) 删除当前行
CTRL + K,C(comment) 注释选定内容
CTRL + K,U(uncomment) 取消注释选定内容
CTRL + E,D 格式化全部代码
CTRL + E,F(format) 格式化选中代码
七.优秀代码要求
这里只提出7点,后续会根据《高质量的c/c++编程》一书不断更新补充相关内容.
1.
代码运行正常
2. bug
很少
3.
效率高
4.
可读性高
5.
可维护性高
6.
注释清晰
7.
文档齐全
常见的
coding
技巧:
1. 使用
assert
2.
尽量使用
const
3.
养成良好的编码风格
4.
添加必要的注释
5.
避免编码的陷阱