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
相关文章
|
24天前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
44 10
|
26天前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
23天前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
29 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
26天前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
3月前
|
Linux 测试技术 开发工具
CentOS Linux 8使用阿里源(安装jdk11、git测试)
CentOS Linux 8使用阿里源(安装jdk11、git测试)
346 1
|
3月前
|
Linux 开发工具 git
解决 Linux git push 贡献者不同(没有出现绿点)的问题
解决 Linux git push 贡献者不同(没有出现绿点)的问题
|
4月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
306 2
|
4月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
25天前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
23 0
|
3月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
33 1