《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
相关文章
|
14天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
2天前
|
NoSQL Java Unix
Linux:调试器 - gdb
Linux:调试器 - gdb
11 1
|
3天前
|
NoSQL Linux 编译器
【Linux】开始使用gdb吧!
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
49 17
【Linux】开始使用gdb吧!
|
3天前
|
关系型数据库 MySQL Linux
在Linux系统上实现高效安装与部署环境的全方位指南
在Linux系统上实现高效安装与部署环境的全方位指南
|
5天前
|
运维 NoSQL Linux
linux环境收集core文件步骤
请注意,生成core文件可能会占用磁盘空间,因此应谨慎使用。一旦完成故障排查,建议将相关的core文件删除以释放磁盘空间。
32 5
|
5天前
|
NoSQL Linux C语言
【Linux】Linux调试器-gdb使用
【Linux】Linux调试器-gdb使用
7 0
|
6天前
|
运维 NoSQL Linux
linux环境收集core文件步骤
请注意,生成core文件可能会占用磁盘空间,因此应谨慎使用。一旦完成故障排查,建议将相关的core文件删除以释放磁盘空间。
20 4
|
12天前
|
Linux 开发者
【亮剑】Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件
【4月更文挑战第30天】本文介绍了Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件。flock适合脚本,fcntl提供底层灵活性,lockfile用于管理锁定文件,flockfile则结合两者功能。选择锁定策略时需考虑应用场景,如脚本可选flock,复杂需求则用fcntl。理解并正确使用这些工具对保证系统稳定性和数据一致性至关重要。
|
14天前
|
编解码 Linux
FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
在《FFmpeg开发实战》一书中,介绍了如何在Linux环境下为FFmpeg集成libopus和libvpx,以支持WebM格式的Opus和VP8/VP9编码。首先,下载并安装libopus。接着,下载并安装libvpx。最后,在FFmpeg源码目录下,重新配置FFmpeg,启用libopus和libvpx,编译并安装。通过`ffmpeg -version`检查版本信息,确认libopus和libvpx已启用。
FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
|
15天前
|
编解码 Linux
FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr
在Linux环境下,为FFmpeg添加对AAC、MP3、OGG和AMR音频格式的支持,需安装libogg、libvorbis和opencore-amr库。首先,从官方源下载各库的最新源码,如libogg-1.3.5、libvorbis-1.3.7和opencore-amr-0.1.6,然后解压并依次执行`./configure`、`make`和`make install`进行编译安装。接着,在FFmpeg源码目录中,使用`./configure`命令重新配置,并重新编译安装FFmpeg。最后,验证FFmpeg版本信息确认已启用ogg和amr支持。
FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr