实用调试技巧

目录

一.什么是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. 避免编码的陷阱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值