【Linux系统编程】代码调试工具gdb--1

简介: 【Linux系统编程】代码调试工具gdb--1


介绍:


       gdb是一个非常强大的调试工具,在gdb下,我们可对编写的代码进行各种调试,找出其中的bug,但是需注意的是,此工具调试与VS编译器的调试道理相同,只有在debug版本下才可以被调试,在release版本下不能被调试。因为debug版本是程序员专门开发时使用的版本,要包含一切与调试相关的数据,占用内存大,而release版本是最终开发后给用户使用的版本,也就是测试版本,没有与调试相关的数据,并且还将代码做了许多优化,占用内存小。


版本的调用:


       在Linux系统的CentOS 7版本下,gcc/g++编译时默认的模式是release模式,以下的所有演示都是在CentOS 7版本下进行的。其它版本下编译器的配置可能有些不同,默认的模式可能是debug。


       如果需要使用debug模式,通常需要在编译命令中添加 -g 参数,如 gcc -g 或 g++ -g等。如果想要编译为release模式,需要在编译命令中添加 -O2 或 -O3 参数。


[zhu@zhujunhao day11]$ g++ -o code-d -g code.cpp   //运用debug模式进行编译
[zhu@zhujunhao day11]$ g++ -o code-r -O2 code.cpp  //运用release模式进行编译
[zhu@zhujunhao day11]$ g++ -o code.exe code.cpp    //默认模式,使用release进行编译
[zhu@zhujunhao day11]$ ll
//下面可观察到release模式和debug模式编译形成的可执行程序占用内存大小差距很大
total 48
-rw-rw-r-- 1 zhu zhu   103 Dec 11 11:18 code.cpp
-rwxrwxr-x 1 zhu zhu 19536 Dec 11 12:29 code-d
-rwxrwxr-x 1 zhu zhu  8968 Dec 11 12:31 code.exe
-rwxrwxr-x 1 zhu zhu  8832 Dec 11 12:30 code-r

       gdb调试器只能在debug编译模式下运行,因为只有debug有与调试有关的数据。从上面可看出,debug生成的可执行程序占用的内存大,里面包含了可调试的数据。


readelf工具:


       readelf 工具用于读取可执行程序的格式问题。可执行程序所对应的格式在Linux中叫做ELF。通过使用 readelf 命令,我们可查看ELF文件的头部信息、节区信息、符号表等等。这些信息对于理解和分析程序的组成、结构和行为非常重要。后期在gdb调试工程过程中,会更加依赖使用readelf工具查看格式化问题。如使用 readelf -S [可执行文件] 只读取头部ELF信息。


[zhu@zhujunhao day11]$ readelf -S code-d   //显示节头


       这里提醒下,readelf只能用于程序的可执行文件。


gdb调试运用:


       首先,当我们生成可执行程序时,使用 gdb [可执行文件] 可进入调试阶段。当进入调试界面后,l 指令可查看源文件的内容,具体使用如下:


         1,l n(n代表行号) 从第n行开始,显示往后的10行源代码。


         2,只输入 l ,将从源代码中光标所在的位置开始显示10行内容。


         3,l [文件]:n(n代表行号)  显示指定[文件]中10行内容,其中,第 n 行内容将会在中间。


       若我们想往后面再观看源代码时,只需直接 “回车” 键即可,因为gdb会自动记录最近一次的指令。若想退出,输入quit后可退出调试界面。注意,gdb调试器调试的是生成的可执行文件,不是源文件。  


[zhu@zhujunhao day11]$ gdb code.exe    //进入code.exe的调试界面
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/zhu/day11/code.exe...done.
(gdb) l 1       //从第一行开始显示10行源代码
warning: Source file is more recent than executable.
1    #include <iostream>
2    using namespace std;
3    int main()
4    {
5        int i = 0, n = 5;  
6        while (i < n)
7        {
8            cout << "兔子" << endl;
9            i++;
10        }
(gdb)         //直接回车继续往下显示源代码,一次10行
11        cout << "Debug" << endl;
12        return 0;    
13    }
(gdb)         
Line number 14 out of range; code.cpp has 13 lines.   //表示已全部展开完毕
(gdb) quit   //退出调试界面


      当进入调试界面后,r(run的简写)指令可运行程序,即从头开始进行调试。


(gdb) r   //启动运行,这里没有设置断点,直接运行完毕
Starting program: /home/zhu/day11/code.exe 
兔子
兔子
Debug
[Inferior 1 (process 12251) exited normally]
Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64 libgcc-4.8.5-44.el7.x86_64


断点功能:


       break(简写:b)是设置断点的指令,使用方法有:


               1,b n 在第n行处设置断点。    


               2,b [函数名] 在指定的函数入口处设置断点。


               3,b [文件名]:n 在指定的文件第n行设置断点。

【Linux系统编程】代码调试工具gdb--2 https://developer.aliyun.com/article/1424718?spm=a2c6h.13148508.setting.26.214f4f0elA5UEs

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
10月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
614 5
|
10月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
812 16
|
10月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
394 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
323 1
Linux系统性能调优技巧和相关工具
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
1312 16
|
11月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1025 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
662 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1624 58