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

简介: 本节书摘来自异步社区《《Linux C编程从入门到精通》》一书中的第2章,第2.4节,作者 宋磊 , 程钢,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 Linux中的调试环境gdb Linux C编程从入门到精通 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图。

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

2.4 Linux中的调试环境gdb

Linux C编程从入门到精通
从图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的帮助文档。


1983df7de495f798044f213addfba6623d5055ba

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一些最常用的参数选项。


8e23cdd697005ce7727038768e0cf67a5702dc04

2.4.3 gdb运行模式的选择

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

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


0274da7877815bd3cc3f77ecb1e6436481fea93f

2.4.4 gdb应用实例

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

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


27c6ea5cec53c2f39f1d6315be3d1b55e3f2666e

图2.7 开始调试

(2)使用“b”快捷键在程序开始处设置断点,然后使用“run”开始调试,如图2.8所示。


7ef36bfa24deeeffe2e7e7a1980fd41a7f5bb4a5

图2.8 启动程序调试

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

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
1月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
181 11
|
3月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
146 20
|
3月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
140 16
|
3月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
259 8
|
4月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
329 10
|
3月前
|
Ubuntu 安全 Linux
Ubuntu 24.10 发行版登场:Linux 6.11 内核、GNOME 47 桌面环境
Ubuntu 24.10 还带来了 GNOME 47,增强了性能和稳定性,并引入了新功能。此版本的 Ubuntu 还默认在采用 Nvidia 显卡的硬件上切换到 Wayland,并在支持的硬件上默认使用开源的 Nvidia 560 内核模块。 另外需要注意的是,Ubuntu 24.10 是稳定版本,但作为非 LTS 版本,仅支持 9 个月。
|
3月前
|
安全 Linux 网络安全
Linux系统初步设置本地Git环境和生成SSH密钥的步骤。
现在您的Linux系统已经配置好了Git环境,并创建并添加了SSH密钥,可以安全地与远端仓库进行交互,无论是克隆、推送还是拉取操作。此过程确保了数据传输的安全并使版本控制流程更为顺畅。使用Git时应考虑定期更新并管理您的凭据,以确保安全性。
479 0
|
3月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
467 0
|
4月前
|
Kubernetes Linux 网络安全
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
初始化成功后,记录下显示的 `kubeadm join`命令。
260 0