《Linux C编程从入门到精通》——2.4 Linux中的调试环境gdb

简介: 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图。如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境。

本节书摘来自异步社区《Linux C编程从入门到精通》一书中的第2章,第2.4节,作者:宋磊 , 程钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 Linux中的调试环境gdb

从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图。如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境。

Linux包含了一个gdb的调试程序,gdb是一个用来调试C程序的强大的调试器,它使程序员能在程序运行时观察程序的内部结构和内存的使用情况。gdb提供了以下一些功能。

监视程序中变量的值。
设置断点以使程序在指定的代码行上停止执行。
一行行地执行代码。
在命令行上键入gdb并按回车键就可以运行gdb了。如果一切正常,gdb将被启动并且在屏幕上会看到类似如下的内容。

alloeat@Ubuntu:~/chapter2Exam$ gdb
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0Ubuntu2) 7.4-2012.04
Copyright (C) 2012 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 "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>.
(gdb)

2.4.1 gdb功能简介
gdb是功能强大的调试器,支持的调试命令非常丰富,可以实现不同的功能。这些命令包括从文件装入的简单命令到允许检查所调用的堆栈内容的复杂命令。表2.9列出了使用gdb调试时会用到的一些命令。如果想了解gdb的详细使用,可以参考gdb的帮助文档。
screenshot

2.4.2 gdb的调用
通常来说,调用gdb只需要使用一个参数。

gdb <可执行程序名>
如果程序运行时产生了段错误,会在当前目录下产生核心内存映象core文件,可以在指定执行文件的同时为可执行程序指定一个core文件。

gdb <可执行文件名> core
除此之外,还可以为要执行的文件指定一个进程号。

gdb <可执行文件名> <进程号>
【例2.3】gcc编译器应用实例1。

【例2.3】是一个使用gdb来为【例2.1】指定进程号的应用实例。

alloeat@Ubuntu:~/chapter2Exam$ gdb Examhello 2000
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0Ubuntu2) 7.4-2012.04
Copyright (C) 2012 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 "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/alloeat/chapter2Exam/Examhello...(no debugging symbols found)...done.
Attaching to program: /home/alloeat/chapter2Exam/Examhello, process 2000
ptrace: 没有那个进程.
/home/alloeat/chapter2Exam/2000: 没有那个文件或目录
(gdb)

首先,gdb会寻找一个文件名为2000的文件,如果找不到,则把调试程序的进程号设成2000。

当gdb运行时,把任何一个不带选项前缀的参数都作为一个可执行文件或core文件,或者要与被调试的程序相关联的进程号。不带任何选项前缀的参数和前面加了-se或-c选项的参数效果一样。gdb把第一个前面没有选项说明的参数看作前面加了-se选项,也就是需要调试的可执行文件,并从此文件里读取符号表。如果有第二个前面没有选项说明的参数,将被看作是跟在-c选项后面,也就是需要调试的core文件名。

如果不希望看到gdb开始的提示信息,可以用gdb--silent执行调试工作,通过更多的选项,开发者可以按自己的喜好定制gdb的行为。

输入gdb--help或-h可以得到gdb启动时的所有选项提示。gdb命令行中的所有参数都被按照排列的顺序传给gdb,除非使用了-x参数。

gdb的许多选项都可以用缩写形式代表,可以用-h查看相关缩写。在gdb中也可以采取任意长度的字符串代表选项,只要保证gdb能唯一地识别此参数就行。

表2.10列出了gdb一些最常用的参数选项。
screenshot

2.4.3 gdb运行模式的选择
可以用许多模式来运行gdb,例如,采用“批模式”或“安静模式”。这些模式都是在gdb运行时在命令行中通过选项来指定的。

表2.11列出了gdb运行模式的相关选项。
screenshot

2.4.4 gdb应用实例
下面是一个使用gdb对【例2.1】生成的代码进行进行调试的应用实例。

(1)运行“gdb+待调试的可执行文件名称”命令来启动调试,如图2.7所示。

screenshot

(3)使用“n”进行下一条语句执行,其间还可以使用其他命令来观察相应的变量运行情况。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
6天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
123 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
2天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
9天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
61 13
|
26天前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
42 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
2月前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
472 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
109 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
48 3
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Ubuntu 应用服务中间件 Linux
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
74 6

热门文章

最新文章