Linux下git和gdb的使用(下)

简介: Linux下git和gdb的使用

2.2、 debug与release版本的区别


①release版本大小小于debug版本

这肯定是毋庸置疑的,因为debug版本需要我们使用工具调试,需要文件展示的信息更多。


1669271021357.jpg


②readelf -S 可执行程序(debug/release)

Linux下有一个readelf -S 可执行程序(debug/release) 指令用于读取可执行程序的二进制构成。


1669271032244.jpg


虽然我们看不懂这些二进制,但是我们可以利用管道过滤一下得到debug信息。


1669271039695.jpg


我们可以小结一下Linux下的默认行为:


gcc默认行为:


                   1、默认是动态链接的。


                   2、默认是release版本


vim默认行为:


                   默认打开就是命令模式


2.3、 gdb的基本指令


gdb 退出:CTRL+d 或quit/q调试命令:


🖊list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。


🖊list/l 函数名:列出某个函数的源代码


🖊r或run:运行程序


🖊n或next:逐过程调试,相当于f10


🖊s或step:逐语句调试,相当于f11,可以进入函数


🖊break(b) 行号:给第n行断点。注意:如果打断点的所在行没有代码,就会相当于断点打在后面有代码的行。


🖊info break(b):用于查看所有断点


🖊finish:首先需要进入函数,finish直接运行到将对应函数跑完,如果跑时挂掉,直接确定函数有问题。


🖊p  变量:查看变量内容。


🖊p &变量:查看变量地址。


🖊set var:修改变量的值


🖊continue(c):从一个断点运行到下一个断点


🖊run(r):r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。


🖊d  b:删除所有断点


🖊d b 断点编号:d  断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。


🖊disable breakpoints:禁用断点


🖊enable breakpoints:启用断点


🖊info(或i) b:查看当前设置了哪些断点


🖊display 变量名:跟踪查看一个变量,每次停下来都显示它的值


🖊undisplay:取消对先前设置的那些变量的跟踪


🖊until X行号:跳至X行,跳出循环到有效代码行(不是空)


🖊breaktrace(或bt):查看各级函数调用及参数,查看调用堆栈


🖊info(i) locals:查看当前栈帧局部变量的值,显示特定区域中的临时变量。


Ⅰ断点


①gdb l  1


从第一行开始显示,显示后面的不用再输入指令,回车即可,gdb会默认记住之前的指令。


1669271068169.jpg


gdb b(break) #


gdb b(break) #:给第#行断点。


我们可以打多个断点。


打过断点后,我们不像在vs上能看到红色断点,我们怎么在Linux上查看断点呢?


info(i) b


info b:用于查看所有断点。


1669271105908.jpg


④delete(d) 断点编号


d  断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。


1669271117279.jpg


在掌握这些基本指令之后,怎么调试呢?在vs下我们f5是执行到断点,当断点比较多的时候,f5表示从一个断点执行到另一个断点。CTRL+f5 是执行可执行程序。那么在Linux下与之对应的哪些指令是调试呢?


Ⅱ调试


①gdb r


r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。


1669271130084.jpg


②gdb p


p 变量用于查看内容,p &变量,查看地址。


1669271138592.jpg


但是我们这样查看很不方便,只能看到临时的,不能常显示。


③display && undisplay


display可以常显示变量。 display &变量可以常显示变量地址。


1669271147002.jpg


取消常显示:undisplay 编号


undisplay用于取消常显示,我们取消的也是变量的编号。


1669271159104.jpg


④disable && enable


有些断点虽然我们打下了,但是我们不想让它生效,我们又不想取消这个断点就可以使用disable 断点编号指令。


1669271168256.jpg


与之对应的是enable 断点编号:重新使断点生效。

 1669271177862.jpg


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
4月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
186 16
|
3月前
|
Linux 开发工具 git
解决 Linux git push 成功后(但没有出现绿点)的问题
最近学习使用Git,发现有时候在Linux下提交自己的小绿点并没有增加,单在仓库中却可以看到提交的代码。看着连续的绿点中出现几个零零散散的灰点,着实让一个强迫症患者十分难受。接下来分享以下我所知道的问题。
69 0
|
3月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
156 0
|
5月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
199 10
|
6月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
146 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
12月前
|
Linux 开发工具 git
linux自建仓库git之钩子不生效
linux自建仓库git之钩子不生效
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
146 10
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
924 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
10月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
246 1
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
639 3