新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Linux下C编程基础之:gdb调试器

Linux下C编程基础之:gdb调试器

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257150.htm

3.4.2gdb基本命令

gdb的命令可以通过查看help进行查找,由于gdb的命令很多,因此gdb的help将其分成了很多种类(class),用户可以通过进一步查看相关class找到相应命令,如下所示:

(gdb)help

Listofclassesofcommands:

aliases--Aliasesofothercommands

breakpoints--Makingprogramstopatcertainpoints

data--Examiningdata

files--Specifyingandexaminingfiles

internals--Maintenancecommands

Typehelpfollowedbyaclassnameforalistofcommandsinthatclass.

Typehelpfollowedbycommandnameforfulldocumentation.

Commandnameabbreviationsareallowedifunambiguous.

上述列出了gdb各个分类的命令,注意底部的加粗部分说明其为分类命令。接下来可以具体查找各分类的命令,如下所示:

(gdb)helpdata

Examiningdata.

Listofcommands:

call--Callafunctionintheprogram

deletedisplay--Cancelsomeexpressionstobedisplayedwhenprogramstops

deletemem--Deletememoryregion

disabledisplay--Disablesomeexpressionstobedisplayedwhenprogramstops

Typehelpfollowedbycommandnameforfulldocumentation.

Commandnameabbreviationsareallowedifunambiguous.

若用户想要查找call命令,就可键入“helpcall”。

(gdb)helpcall

Callafunctionintheprogram.

Theargumentisthefunctionnameandarguments,inthenotationofthe

currentworkinglanguage.Theresultisprintedandsavedinthevalue

history,ifitisnotvoid.

当然,若用户已知命令名,直接键入“help[command]”也是可以的。

gdb中的命令主要分为以下几类:工作环境相关命令、设置断点与恢复命令、源代码查看命令、查看运行数据相关命令及修改运行参数命令。以下就分别对这几类命令进行讲解。

1.工作环境相关命令

gdb中不仅可以调试所运行的程序,而且还可以对程序相关的工作环境进行相应的设定,甚至还可以使用shell中的命令进行相关的操作,其功能极其强大。gdb常见工作环境相关命令如表3.11所示。

表3.11 gdb工作环境相关命令

命令格式

含义

setargs运行时的参数

指定运行时参数,如setargs2

showargs

查看设置好的运行参数

Pathdir

设定程序的运行路径

showpaths

查看程序的运行路径

setenvironmentvar[=value]

设置环境变量

showenvironment[var]

查看环境变量

cddir

进入dir目录,相当于shell中的cd命令

Pwd

显示当前工作目录

shellcommand

运行shell的command命令

2.设置断点与恢复命令

gdb中设置断点与恢复的常见命令如表3.12所示。

表3.12 gdb设置断点与恢复相关命令

命令格式

含义

Infob

查看所设断点

break[文件名:]行号或函数名条件表达式>

设置断点

tbreak[文件名:]行号或函数名条件表达式>

设置临时断点,到达后被自动删除

delete[断点号]

删除指定断点,其断点号为“infob”中的第一栏。若缺省断点号则删除所有断点

disable[断点号]

停止指定断点,使用“infob”仍能查看此断点。同delete一样,若缺省断点号则停止所有断点

enable[断点号]

激活指定断点,即激活被disable停止的断点

condition[断点号]条件表达式>

修改对应断点的条件

ignore[断点号]num>

在程序执行中,忽略对应断点num次

Step

单步恢复程序运行,且进入函数调用

Next

单步恢复程序运行,但不进入函数调用

Finish

运行程序,直到当前函数完成返回

C

继续执行函数,直到函数结束或遇到新的断点

设置断点在gdb的调试中非常重要,下面着重讲解gdb中设置断点的方法。

gdb中设置断点有多种方式:其一是按行设置断点;另外还可以设置函数断点和条件断点。下面具体介绍后两种设置断点的方法。

①函数断点。

gdb中按函数设置断点只需把函数名列在命令“b”之后,如下所示:

(gdb)btest.c:sum(可以简化为bsum)

Breakpoint1at0x80484ba:filetest.c,line16.

(gdb)infob

NumTypeDispEnbAddressWhat

1breakpointkeepy0x080484bainsumattest.c:16

要注意的是,此时的断点实际是在函数的定义处,也就是在16行处(注意第16行还未执行)。

②条件断点。

gdb中设置条件断点的格式为:b行数或函数名if表达式。具体实例如下所示:

(gdb)b8ifi==10

Breakpoint1at0x804848c:filetest.c,line8.

(gdb)infob

NumTypeDispEnbAddressWhat

1breakpointkeepy0x0804848cinmainattest.c:8

stoponlyifi==10

(gdb)r

Startingprogram:/home/yul/test

Thesumof1-mis1275

Breakpoint1,main()attest.c:9

9n+=i;

(gdb)pi

$1=10

可以看到,该例中在第8行(也就是运行完第7行的for循环)设置了一个“i==0”的条件断点,在程序运行之后可以看出,程序确实在i为10时暂停运行。

3.gdb中源码查看相关命令

在gdb中可以查看源码以方便其他操作,它的常见相关命令如表3.13所示。

表3.13 gdb源码查看相关相关命令

命令格式

含义

list行号>|函数名>

查看指定位置代码

file[文件名]

加载指定文件

forward-search正则表达式

源代码的前向搜索

reverse-search正则表达式

源代码的后向搜索

dirDIR

将路径DIR添加到源文件搜索的路径的开头

showdirectories

显示源文件的当前搜索路径

infoline

显示加载到gdb内存中的代码

4.gdb中查看运行数据相关命令

gdb中查看运行数据是指当程序处于“运行”或“暂停”状态时,可以查看的变量及表达式的信息,其常见命令如表3.14所示。

表3.14 gdb查看运行数据相关命令

命令格式

含义

print表达式|变量

查看程序运行时对应表达式和变量的值

xn/f/u>

查看内存变量内容。其中n为整数表示显示内存的长度,f表示显示的格式,u表示从当前地址往后请求显示的字节数

display表达式

设定在单步运行或其他情况中,自动显示的对应表达式的内容

backtrace

查看当前栈的情况,即可以查到哪些被调用的函数尚未返回

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程




评论


相关推荐

技术专区

关闭