【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
相关文章
|
4天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
4天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
21 3
|
7天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
24 6
|
7天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
33 6
|
8天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
36 5
|
8天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
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
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
99 0