目录
编辑4.3.2 多文件中可以使用 b/break+文件名:行号
4.5.1 disable + 断点序号:禁用断点 断点Enb变为n
7.2 finish 从当前进入的函数开始执行到这个函数结束结束
关于windows系统的调试
1.前言关于程序bug
那我们就不得不提及那个开拓时代,和那段在编程世界的神话;
与“阿兰·图灵、史蒂夫·乔布斯、比尔·盖茨”等一同入选“IT界十大最有远见的人才”的唯一一位女性——格蕾丝·赫柏
大家可以点击链接了解她的故事,现在我们来看一下她是如何发现并命名世界上第一个“BUG”的。
赫柏从海军学校毕业后,因为出色的数学背景,被分配到美国船舶局位于哈佛大学的战时科研中心。彼时,军方正在开展世界第一台大型数字计算机的研究项目——马克一号。赫柏被任命为著名计算机专家霍德艾肯博士的助手,成为这个项目的第三名程序员。在这儿,赫柏开启了自己程序员的生涯。她的主要任务,就是为马克一号,还有接下来的马克二号,马克三号编写程序与软件。
一天,计算机发生故障,赫柏经过排查,在计算机的继电器触电里,找到了一只被夹扁的小飞蛾,这只小虫子卡住了机器的运行,赫柏顺手将飞蛾夹在工作笔记里,并诙谐的把程序故障称为“bug”。这就是我们今天最爱说的“bug”的由来。它的意思,和原身一致,真就是“一只臭虫”这一称呼后来演变成表达缺陷漏洞的计算机专业术语,人们习惯地把排除程序故障叫做“debug”(除虫)。
赫柏发现第一个“bug”后的手稿:
这便是BUG的由来
2. 调试是什么?有多重要?
所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧, 就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。 顺着这条途径顺流而下就是犯罪,逆流而上,就是真相。 一名优秀的程序员是一名出色的侦探。 每一次调试都是尝试破案的过程。
我们写代码都是简单粗暴:
所以,更要知道调试的重要性和如何调试代码。而不是能跑就行,特别是在学习阶段。
2.1调试是什么
调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。人们习惯地把排除程序故障叫做“debug”(除虫)。
2.2 调试的基本步骤
①发现程序错误的存在
②以隔离、消除等方式对错误进行定位
③确定错误产生的原因
④提出纠正错误的解决办法
⑤对程序错误予以改正,重新测试
2.3 Debug和Release的介绍
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。形成的文件体积大。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,去掉了调试信息debug以便用户很好地使用。
项目立项 -》搭建团队&&排期计划-》环境预准备,流程说明
①debug版本支持调试:
②relese版本不支持调试
程序感觉一步跳完。
3.linux调试器--gdb的下载
注意在root账户下或者普通用户sudo执行指令
3.1 如何使gcc生成release版本的代码
gcc默认动态链接,默认生成的是release版本的,这个版本不支持调试:
那么要生成debug版本的二进制程序,需要在gcc后加上-g指令
这样生成的二进制文件就可以进行调试:
4.调试指令
编写代码如下,方便调试:
4.1 调试开始
指令:gdb 生成的可执行的二进制文件名
进入调试状态:
4.2指令 l 显示调试代码
l+行号:显示指定行之后的代码(gdb自动记录最近一条指令)
4.1.1 l 函数名 查看某个函数的代码
4.1.2 l 文件名:行号 显示某个文件的第几行
4.2 r/run 程序运行起来
程序要运行起来才可以调试
4.3 打断点 b/break+行号
4.3.1 b/break +函数名
4.3.2 多文件中可以使用 b/break+文件名:行号
4.4 info 可以查看当前所有的断点
4.5 d+断点编号 删掉断点
4.5 不删除断点 使能断点---禁用和启用断点
Enb 是y断点就是打开的
4.5.1 disable + 断点序号:禁用断点 断点Enb变为n
4.5.2 enable +断点序号 :开启断点:
4.5.6 c 直接从一个断点运行到下一个断点
5.逐语句调试/逐过程调试
函数是由语句构成的 ,逐语句按键没有函数概念只有语句概念所以可以进入函数
逐过程是每一行看做一个整体,包括函数都是一个整体,从上到下执行。
5.1 n/next 回车 逐过程
5.2 逐语句 step/s 回车 逐语句进入函数
6 查看变量的值和地址
6.1 p 变量名 看变量的值
6.2 p &变量名 看变量的地址
6.3 display 变量名 常显示变量的值
6.4 display &变量名 常显示变量的地址
6.5 undisplay 编号 取消常显示
7.调用堆栈
7.1 bt调用堆栈 查看自己是否进入了函数
7.2 finish 从当前进入的函数开始执行到这个函数结束结束
这里就直接到了14行
7.3until +行数
for循环等可以直接走完,一个范围内运行到指定行
死循环 跑不出来
8 改变变量值:进行局部测试
set var 变量名 = 值
9.结语
以上就是常用的调试指令,大家可以配合windows下的调试对比使用。创作不易,大家如果觉得还可以的话,欢迎大家三连,有问题的地方欢迎大家指正,一起交流学习,一起成长,我是Nicn,正在c++方向前行的奋斗者,数据结构内容持续更新中,感谢大家的关注与喜欢。