博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件开发--调试器GDB
阅读量:7031 次
发布时间:2019-06-28

本文共 1188 字,大约阅读时间需要 3 分钟。

一.GDB介绍

A.GDB

1.GNU项目中的调试器
2.能够追踪程序的执行,也能够恢复程序崩溃前的状态
B.GDB的重要性
1.软件不是一次性开发完成的(是软件就有bug,是程序就有问题)
2.调试时软件开发过程中不可或缺的技术
C.GDB的常规应用
1.自定义程序的启动方式(指定影响程序运行的参数)
2.设置条件断点(在条件满足时暂停程序的执行)
3.回溯检查导致程序异常结束的原因
4.动态改变程序执行流(定位问题的辅助方式)
D.GDB的启动方式
1.直接启动--gdb ,gdb test.out ,gdb test.out core,
2.动态链接--gdb test.out pid
示例:对之前的在开发中的辅助工具章提到使用addr2line对程序中出现的错误进行定位,该示例使用gdb调试来完成该操作
软件开发--调试器GDB软件开发--调试器GDB
运行过程图如图所示
软件开发--调试器GDB
从图中所标记的红线可以知道编译以及gdb的使用过程
1.首先使用gcc生成可调式的结果
2.使用gdb命令开启gdb调试
3.使用file test.out命令关联生成的结果
4.使用run命令生成结果 可以看到在标记5处知道程序出现的错误处
与之前的addr2line命令查找相比,gdb的操作就很快捷与方便
E.使用GDB进行断点调试
1.断电类型
a.软件断点:由非法指令异常实现(软件实现)
b.硬件断点:由硬件特性实现(数量有限)
c.数据断点:由硬件特性实现(数量有限)
F.软件断点的相关操作
a.通过函数名设置断点
1.break func_name
2.tbreak func_name
b.通过文件名行号设置断点
1.break file_name:line_num
2.tbreak file_name:line_num
软件调试的相关操作
软件开发--调试器GDB软件开发--调试器GDB
第一次GDB断点调试的过程如下所示
软件开发--调试器GDB
可以看到
1.在使用了start命令之后,在main函数的入口处25行生产了断点
2.使用break命令在37行生成断点并且使用info breakpoints查看该断点是否存在
3.继续运行程序发现在37行停住,使用set var命令与next命令对其继续查看
软件开发--调试器GDB
1.使用next命令之后该程跳出循环来到41行
2.使用tbreak命令在43行设置断点,继续运行发现程序正常
3.使用jump命令使其跳至45行,由结果可以得出程序关闭正常,可以猜测程序在43行处有问题
第二次调试过程
软件开发--调试器GDB软件开发--调试器GDB
1.主要使用tbreak func直接将断点设置在func函数并使用info breakpoints进行查看断点是否设置成功
2.继续运行可以看到提示在func.c:7处提示问题
3.执行return命令发现程序正常结束,可以知道函数在func.c:7出有问题

转载于:https://blog.51cto.com/13475106/2368777

你可能感兴趣的文章
到底谁应该对软件开发的质量负责?
查看>>
微软Windows Core OS被曝应用了开源组件
查看>>
用Elm语言降低失败的风险
查看>>
资深专家都知道的Docker常用命令
查看>>
谈谈UCloud的秒级在线快照服务
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
EGO走进美团——追寻千亿市场背后的技术力量
查看>>
腾讯正式宣布成立技术委员会,要对组织架构下狠手
查看>>
3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!
查看>>
腾讯携手中科院国家天文台落地FAST 用云计算探索星辰大海
查看>>
随机森林算法4种实现方法对比测试:DolphinDB速度最快,XGBoost表现最差
查看>>
详解前端异步编程的六种方案
查看>>
红帽论坛北京站召开 设立亚太开放创新实验室
查看>>
苏宁11.11:如何基于异步化打造会员任务平台?
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
Oracle即将发布的全新Java垃圾收集器 ZGC
查看>>
深入浅出Tensorflow(三):训练神经网络模型的常用方法
查看>>
Blazor将.NET带回到浏览器
查看>>
利用人工智能提升团队包容性
查看>>
详解分布式系统本质:“分治”和“冗余”
查看>>