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
相关文章
|
2月前
|
Linux 开发工具 git
linux自建仓库git之钩子不生效
linux自建仓库git之钩子不生效
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
62 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
139 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
3月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
5月前
|
Linux 测试技术 开发工具
CentOS Linux 8使用阿里源(安装jdk11、git测试)
CentOS Linux 8使用阿里源(安装jdk11、git测试)
505 1
|
5月前
|
Linux 开发工具 git
解决 Linux git push 贡献者不同(没有出现绿点)的问题
解决 Linux git push 贡献者不同(没有出现绿点)的问题
|
Linux 开发工具 git
|
14天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
36 1
[Git]入门及其常用命令
|
1月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
110 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令