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

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的帮助文档。

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

2.4.3 gdb运行模式的选择

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

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

2.4.4 gdb应用实例

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

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

图2.7 开始调试

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

图2.8 启动程序调试

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

时间: 2024-11-01 10:21:16

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

《Linux C编程从入门到精通》》一导读

前言 Linux C编程从入门到精通 行业背景 Linux操作系统是一种类UNIX操作系统,其代码是开源的,任何开发者.爱好者都可以免费使用,因此一经推出便风靡世界.Linux自从面世以来,经不同开发者和程序员的开发,现在存在着许多不同的版本,这些版本的根本都在于使用了Linux内核.当前,Linux操作系统安装在各种各样的计算机设备中,包括手机.平板电脑.游戏控制器.台式计算机.大型机和超级计算机.Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统.

《Linux C编程从入门到精通》一第1章 Linux基础1.1 Linux的起源、发展和分类

第1章 Linux基础 Linux C编程从入门到精通 Linux是一套免费使用和自由传播的类UNIX操作系统,它已发展成为现今世界上最流行的一种操作系统.Linux不仅仅能在PC机上运行,随着嵌入式系统的发展,它已经被广泛地应用于各种场合. 1.1 Linux的起源.发展和分类 Linux C编程从入门到精通 Linux从1991年问世到现在已经有20多年的历史,它从一个架构简单的系统内核发展到了现在结构完整.功能丰富的多版本操作系统,本小节将介绍其起源发展和分类. 1.1.1 Linux的起

《Linux C编程从入门到精通》一1.3 Shell的使用基础

1.3 Shell的使用基础 Linux C编程从入门到精通 由于在C语言开发中常常需要和Shell打交道,本小节将简要介绍Shell的基本使用方法,终端的运行界面可以参考图1.5,以下仅仅给出在其中进行操作的相应字符串. 1.3.1 Shell命令的标准格式 Shell和用户交互是以字符串形式存在的命令和命令输出反馈的方式进行的,在Linux命令行中输入的第一个字符串必须是一个命令的名字,第二个字符串是命令的选项或参数,命令行中的每个字符串必须由空格键或Ta键隔开,格式如下. $ 命令 选项

《Linux C编程从入门到精通》一1.4 Linux的常用命令

1.4 Linux的常用命令 Linux C编程从入门到精通 在Shell中,用户需要通过使用适当的命令来完成相应的操作,本小节将介绍Linux中的部分常用命令. 1.4.1 文件操作命令 文件操作是Linux系统里最基本也是最常用的操作,本节列举了Linux中经常执行的一些普通文件操作命令. 1.显示文件列表 显示指定工作目录中所包含内容的命令是ls.要说明的是,ls命令列出的是文件的名字,而不是文件的内容.该命令的使用方式如下. ls [选项] [文件目录列表] ls命令中的常用选项如表1.

《Linux C编程从入门到精通》一第2章 在Linux中编写C语言代码2.1 Linux中C语言程序开发流程和工具介绍

第2章 在Linux中编写C语言代码 Linux C编程从入门到精通 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Lin

《Linux C编程从入门到精通》一2.2 Linux中的C语言编译器gcc

2.2 Linux中的C语言编译器gcc Linux C编程从入门到精通 gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,使用gcc可以编译C和C++源代码,编译出的目标代码质量非常好,编译速度也很快.本节主要讨论gcc的安装与使用方法. 2.2.1 gcc的安装 在Ubuntu12.04中,gcc是已安装好的,但是其还缺少常用的头文件和库文件,所以还需要安装build-essential这个包,可以在联网状态下使用如下命令来安装这个包. $ sudo ap

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

2.4 Linux中的调试环境gdb 从图2.1中可以看到,在实际开发过程中,程序除了语法正确之外,还必须符合设计者的逻辑意图.如果结果不正确,则可以通过相应的调试环境来跟踪调试,本小节将介绍Linux中最常用的gdb调试环境. Linux包含了一个gdb的调试程序,gdb是一个用来调试C程序的强大的调试器,它使程序员能在程序运行时观察程序的内部结构和内存的使用情况.gdb提供了以下一些功能. 监视程序中变量的值. 设置断点以使程序在指定的代码行上停止执行. 一行行地执行代码. 在命令行上键入g

《Linux C编程从入门到精通》——导读

**前言**Linux操作系统是一种类UNIX操作系统,其代码是开源的,任何开发者.爱好者都可以免费使用,因此一经推出便风靡世界.Linux自从面世以来,经不同开发者和程序员的开发,现在存在着许多不同的版本,这些版本的根本都在于使用了Linux内核.当前,Linux操作系统安装在各种各样的计算机设备中,包括手机.平板电脑.游戏控制器.台式计算机.大型机和超级计算机.Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统.本书是Linux C语言开发的基础教程

《Linux C编程从入门到精通》——第 2 章 在Linux中编写C语言代码 2.1Linux中C语言程序开发流程和工具介绍

第 2 章 在Linux中编写C语言代码 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Linux中C语言程序开发流程和工