Linux基础环境开发工具的使用(三):gdb调试器(下)

简介: Linux基础环境开发工具的使用(三):gdb调试器


5.局部逐行查找

n:逐过程调试,不会进入函数体内部(就是VS中的F10)

我们重新开始进入gdb,开始下面的操作

然后r运行到第17行

接着我n

程序会运行到第19行(因为第18行是空行,没有语句)

并不会进入Sum函数当中

然后我们继续c,因为我们只设置了一个断点,所以继续c会直接运行到程序结束

s:逐语句调试,会进入函数体内部进行调试(就是VS中的F11)
• 1

然后我们依然是先r运行到第17行,

然后s

因为

所以我们可以直接回车单步执行

这个单步执行的方式,n也一样

n和s的区别只有进不进入函数的区别

6.监视变量

这个时候我想看一下i,n,sum的值,i和n的地址

p 变量:显示变量的内容或地址
• 1

那么怎么常显示呢?

display 变量名/变量的地址:跟踪查看一个变量,常显示该变量的内容或地址(就是VS中的监视窗口)
undisplay 该变量的编号:取消对该变量的监视

我们可以display

我现在不想常显示sum和&i了,可以使用undisplay

7.其他命令

我现在想知道我在哪个函数里面,我是从哪个函数当中过来的

可以使用bt

bt:查看调用堆栈

我就可以看出我现在是在Sum函数当中,我是从main函数的第17行过来的

set var name=value:在接下来的调试过程中修改name这个变量的值为value
(没有修改文件中该变量的值,用于进行多分支(if else switch case....)测试)

下面我们来看一下这个set var的用处

我重新写一份代码

然后r运行到第5行

现在我想测试一下a2的情况,看看我a2的那个分支是否会按我预期的一样执行

我们发现这样就能够在调试的过程当中可以一次性成功测试所有分支,避免了我想要去测试其他分支时还需要再去修改源代码中相应的值

我们新建了一个文件test1.c

然后在里面写了一个死循环

下面我们测试一下:

1.直接r运行->程序卡住

然后我们ctrl+c退出此次r运行

2.借助断点进入Sum函数执行finish

然后我们ctrl+c退出,然后重新r运行到18行

3.接着until运行到20行

以上就是Linux基础环境开发工具的使用(三):gdb调试器的全部内容,希望能对大家有所帮助!

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
5月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
550 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
5月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
389 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
5月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
626 11
|
7月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
364 20
|
7月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
254 16
|
7月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
544 8
|
程序员 编译器 Linux
linux gdb-多线程调试
相信使用C/C++语言开发软件的程序猿们都经历过‘栈溢出’的问题。‘栈溢出’问题通常十分的隐蔽,有的时候问题复现也十分的困难。每当软件出现莫名其妙的问题时,总是有人怀疑是不是栈溢出了,但是问题的排查又十分的困难,所以,‘栈溢出’就是广大C/C++开发者的噩梦。
328 0
|
NoSQL IDE Linux
linux gdb-多线程调试
linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下面开始逐步的学习linux下gdb的使用方式。
700 0
|
6月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
730 1
二、Linux文本处理与文件操作核心命令