【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月前
|
存储 安全 Linux
|
1月前
|
Linux Shell 数据安全/隐私保护
|
2月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
2月前
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
41 1
|
2月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
3月前
|
Linux
使用qemu来学习Linux的休眠和唤醒
使用qemu来学习Linux的休眠和唤醒
|
3月前
|
Linux
linux内核原子操作学习
linux内核原子操作学习
|
程序员 编译器 Linux
linux gdb-多线程调试
相信使用C/C++语言开发软件的程序猿们都经历过‘栈溢出’的问题。‘栈溢出’问题通常十分的隐蔽,有的时候问题复现也十分的困难。每当软件出现莫名其妙的问题时,总是有人怀疑是不是栈溢出了,但是问题的排查又十分的困难,所以,‘栈溢出’就是广大C/C++开发者的噩梦。
155 0
|
NoSQL IDE Linux
linux gdb-多线程调试
linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下面开始逐步的学习linux下gdb的使用方式。
436 0
|
21天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
124 6