【Linux系统化学习】开发工具——gdb(调试器)

简介: 前几篇文章分别介绍了在Linux下的代码编辑器、编译器。在编写代码时难免会遇到一些Bug需要我们手动去调试我们的代码片段,在Windows系统下的集成化开发环境我们可能使用某个快捷键就可以进入调试,但是在没有可视化图标的Linux下我们要使用我们的调试器gdb进行调试。

gdb版本检查和安装

版本检查

通过指令判断你的版本和是否安装gdb

·       gdb --version

95abda7833f844d5a38a0960f247636c.png


安装

 

·       yum install -y gdb 

 9f9ad213fb154491befbf5cc106ef34e.png


DebugRelease

我们知道我们编写的代码会有DebugRelease两个版本;Debug版本是我们程序员在实现某一个项目时使用的版本,可以进行各种调试;而Release版本时我们项目完成后,用户使用项目时的版本,不可以调试并且系统会做优化

Windows下的集成开发环境默认为Debug版本,而在Linux下默认为Relase版本。

如何证明在Linux下默认为Release版本呢?

·       通过能否调试判断为Debug还是ReleaseDebug可以调试Release不可以调试。

 

  1 #include<stdio.h>
  2 int Sum(int n)
  3 {
  4     int i=0;
  5     int sum=0;
  6     for(i=1;i<=n;i++)
  7     {
  8         sum+=i;
  9     }
 10     return sum;
 11 }
 12 int main()
 13 {
 14     int n=100;
 15     int ret=Sum(n);
 16     printf("%d \n",ret);                                                                                                                             
 17     return 0;
 18 }

我们在Linux下编写这样一段代码进行测试。

 a4dd793197934072a4f8657e573ac854.png

 

·       通过判断可执行程序的大小判断; Debug系统没有优化比较大,Release系统优化比较小;

 

ab57fcfd85d7422398f8aadc53506aa5.png

因为Debug版本会添加调试信息,所以Debug版本文件会比Release版本大。

通过查看Debug版本和Release版本的文件信息判断,上面说到Debug版本会添加调试信息;而Linux我们的可执行程序是ELF格式,我们可以通过这一点配合查询和管道在我们的Debug版本下查找是否有Debug的内容。

 

874072aa2b5349f9bf959de7c4804cae.png


gdb的使用

·       gdb [可执行程序文件名]  

·       退出: ctrl + d quit 调试命令

 

c7defc5c25014b13a0e29debe113ce04.png

·       l 行号/函数名:从指定行号/函数开始打印10 (不是输入行号/函数名从默认位置打印10

 

ab573c9ffa1d41829147524204cc0dde.png

·       breakb):打断点

 

3c522de9677e494f9737324c7e158378.png

·       info break :查看断点信息

 

1955f8e346e8468b8b5bf410da4f9916.png

·       disable:关闭断点

·       enable:启用断点

 ec694e1daba043039664d910962afaff.png

·       c :跳转到下个断点

 

eafa483da6a04782bb2ab113a64235ab.png

·       d 断点编号:删除断点(不可以通过行号删除)

 8f52e368dbdd42618492af3dd7431d41.png


·       r :运行程序

 35f81061ad1f4f3ab9637ff76824e724.png


·       s :逐语句执行

·       n:逐过程执行

 67a7405fad504031a65870102900b12b.png


·       finish :运行至当前函数结尾

 63449e54b73b413894f5a87f9ebb2274.png


其他指令

·       diaplay [变量名]:追踪查看变量,显示变量所有信息

·       undisplby [变量名]:取消追踪

·       until 行号:跳转到X行

·       bt :调用堆栈

·       break 函数名:在某个函数开头设置断点

·       print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

·       p 变量:打印变量值。

·       set var:修改变量的值

·       delete breakpoints:删除所有断点

·       delete breakpoints n:删除序号为n的断点

·       info(i) locals:查看当前栈帧局部变量的值


Linux下包括软件的安装(yum)、代码编辑(vim多模式编辑器)、代码编译(gcc/g++编译器)、代码调试(gdb),自动化构建代码(make/makefile),这五种开发工具就介绍完了。每个开发工具多多少少都会有一些指令,不用可以去记忆这些指令,可以的去用指令刻意练习,慢慢就会熟练使用指令。

 

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
1天前
|
Unix Linux Windows
Linux 系统目录结构
这篇文章详细解释了Linux系统目录结构,重点介绍了/etc目录存放系统配置文件,/root为管理员主目录,/usr存放应用程序和共享资源,/var存放日志等变动文件,以及/home、/boot等目录的作用。
Linux 系统目录结构
|
22小时前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
Ubuntu Java Linux
查看Linux系统中日志文件
查看Linux系统中日志文件
|
1天前
|
Linux
Linux源码阅读笔记17-资源分配及总线系统
Linux源码阅读笔记17-资源分配及总线系统
|
1天前
|
运维 监控 Linux
"熬夜达人揭秘:Linux系统崩溃前夜,如何用这几行代码救局?监控与排查全攻略!"
【8月更文挑战第19天】作为常需熬夜的系统管理员,面对Linux系统问题时,我总结了一套实用的监控与排查方法。通过使用`top`监控CPU使用率、`free`检查内存状况、`iostat`监测磁盘I/O、及`iftop`观察网络流量,结合`ps`、`pmap`和`strace`等工具深入分析,可有效识别并解决系统瓶颈,减少故障处理时间,保障系统稳定运行。
|
1天前
|
存储 安全 Linux
Linux存储安全:系统更新和补丁管理的策略与实践
【8月更文挑战第19天】安全是一个持续的过程,需要不断地评估、更新和改进策略。
3 0
|
1天前
|
NoSQL 数据可视化 Linux
一文教会你如何在Linux系统中使用Docker安装Redis 、以及如何使用可视化工具连接【详细过程+图解】
这篇文章详细介绍了如何在Linux系统中使用Docker安装Redis,并提供了使用可视化工具连接Redis的步骤。内容包括安装Redis镜像、创建外部配置文件、映射文件和端口、启动和测试Redis实例、配置数据持久化存储,以及使用可视化工具连接和操作Redis数据库的过程。
|
3月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
269 2
|
3月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
2月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
26 1