《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月前
|
Java 关系型数据库 MySQL
Linux环境
Linux环境
35 5
|
6天前
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
30 6
Linux调试
|
19天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
163 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
6天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
19 3
|
6天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
17 3
|
17天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
16天前
|
Linux UED iOS开发
|
21天前
|
Ubuntu 应用服务中间件 Linux
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
|
25天前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
31 3
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
255 3