在了解GDB能够做什么,怎么做之前,让我们先来看看为什么要用GDB,或说对调试工具备什么期望。

一般我们使用GDB(或其他调试工具)是为了发现程式bug,更经常地是在已知程式有错的情况下定位bug。既然这样,我们就需要跟踪程式的执行情况,查看程式执行是否正常,当然这就需要有个让我们和执行程式交互的环境,调试工具提供一个能让程式在您的掌控下执行,并让您能够查看一些执行过程中的“内幕信息”的环境。

为了查看程式运行过程中的状态,我们就希望程式能在适当的位置或在一定的条件下能够暂停运行;为此,调试工具提供了断点、查看变量/表达式、显示程式栈等功能。看了某个点的“内幕”后,我们还期望更多,所以要能控制程式运行才行,这就需要断点、继续运行、单步(多步)运行、进入函数运行等功能,在某些情况下,还需要通过修改当前的执行环境(变量等)来达到期望的执行顺序。也就是说,光看着是不够的,还需要能改才行。

一、引言

在了解GDB能够做什么,怎么做之前,让我们先来看看为什么要用GDB,或说对调试工具备什么期望。

一般我们使用GDB(或其他调试工具)是为了发现程式bug,更经常地是在已知程式有错的情况下定位bug。既然这样,我们就需要跟踪程式的执行情况,查看程式执行是否正常,当然这就需要有个让我们和执行程式交互的环境,调试工具提供一个能让程式在您的掌控下执行,并让您能够查看一些执行过程中的“内幕信息”的环境。

为了查看程式运行过程中的状态,我们就希望程式能在适当的位置或在一定的条件下能够暂停运行;为此,调试工具提供了断点、查看变量/表达式、显示程式栈等功能。看了某个点的“内幕”后,我们还期望更多,所以要能控制程式运行才行,这就需要断点、继续运行、单步(多步)运行、进入函数运行等功能,在某些情况下,还需要通过修改当前的执行环境(变量等)来达到期望的执行顺序。也就是说,光看着是不够的,还需要能改才行。

理解了这些问题后,我们就明白GDB的各个功能的用意了,自然也就明白该如何使用调试工具了。当然,要让GDB有效的发挥作用,还是需要一定的经验和技巧,而这主要靠实践,学习资料(包括本文)充其量只能帮您一把(小心别让他帮倒忙)。

总而言之,我们首先要明白使用调试工具的目的和用意,才能理解他的各项功能,才能借助他快速有效的发现问题;否则,即使工具再强大,您也不知道该如何使用才好。

另外要多结合使用代码检视、运行日志、测试工具等方法来发现潜在的问题,提供程式的质量。这些问题将在另文探讨,先做个广告。

二、GDB能做什么

GDB能够用来调试C、C 、Modula-2的程式。一般来说,GDB能做的事大致能够分为四类:

1、启动程式,按指定的方式执行程式。
2、在指定条件下使程式暂停.
3、当程式被停住时,能够检查此时您的程式中的变化。
4、改变程式中的变量或执行顺序来试验。

三、GDB使用概述

首先要了解的是gdb的help命令,因为您可能记不住各个命令的语法和用途,但只要能正确使用help命令,您就无需任何其他的gdb资料。

启动gdb后,输入help

[eric@linux eric]$ gdb
GNU gdb Red Hat Linux (5.3.90-0.20030710.40rh)
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".
(gdb) help
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.
(gdb)


如上文显示,gdb的命令很多,所以把他分成许多个种类。help命令只是例出gdb的命令种类,假如要看某类中的命令,能够使用help <class> 命令,如:help breakpoints,查看配置断点的任何命令。当如也能够直接help <command>来查看某个命令的具体信息。


gdb 技巧:在记不清整个命令时,能够只打命令的前一个或几个字符,然后敲击两次TAB键来列出任何以这几个字符开头的命令;另为,大多命令都有缩写,如b同 break,c同continue,n同next,p同print等。另为,一个命令在输入能唯一标示命令的前缀后,按一下TAB键就能补齐命令的全称,比如输入ba后按一下TAB键,就自动补齐为backtrace,输入pr后按一下TAB键就补齐为print。

为调试编译代码

为了使 gdb 正常工作, 您必须使您的程式在编译时包含调试信息. 调试信息包含您程式里的每个变量的类型和在可执行文档里的地址映射连同源代码的行号. gdb 利用这些信息使源代码和机器码相关联.
在编译时用 -g 选项打开调试选项.

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!