Linux下C编程基础之:gdb调试器
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教程
评论