Linux下C编程基础之:gdb调试器
令,就可键入"help call"。
(gdb) help call
Call a function in the program.
The argument is the function name and arguments, in the notation of the
current working language. The result is printed and saved in the value
history, if it is not void.
当然,若用户已知命令名,直接键入"help [command]"也是可以的。
gdb中的命令主要分为以下几类:工作环境相关命令、设置断点与恢复命令、源代码查看命令、查看运行数据相关命令及修改运行参数命令。以下就分别对这几类命令进行讲解。
1.工作环境相关命令
gdb中不仅可以调试所运行的程序,而且还可以对程序相关的工作环境进行相应的设定,甚至还可以使用shell中的命令进行相关的操作,其功能极其强大。gdb常见工作环境相关命令如表3.11所示。
表3.11 gdb工作环境相关命令
命 令 格 式 | 含 义 |
set args运行时的参数 | 指定运行时参数,如set args 2 |
show args | 查看设置好的运行参数 |
Path dir | 设定程序的运行路径 |
show paths | 查看程序的运行路径 |
set environment var [=value] | 设置环境变量 |
show environment [var] | 查看环境变量 |
cd dir | 进入dir目录,相当于shell中的cd命令 |
Pwd | 显示当前工作目录 |
shell command | 运行shell的command命令 |
2.设置断点与恢复命令
gdb中设置断点与恢复的常见命令如表3.12所示。
表3.12 gdb设置断点与恢复相关命令
命 令 格 式 | 含 义 |
Info b | 查看所设断点 |
break [文件名:]行号或函数名 <条件表达式> | 设置断点 |
tbreak [文件名:]行号或函数名 <条件表达式> | 设置临时断点,到达后被自动删除 |
delete [断点号] | 删除指定断点,其断点号为"info b"中的第一栏。若缺省断点号则删除所有断点 |
disable [断点号] | 停止指定断点,使用"info b"仍能查看此断点。同delete一样,若缺省断点号则停止所有断点 |
enable [断点号] | 激活指定断点,即激活被disable停止的断点 |
condition [断点号] <条件表达式> | 修改对应断点的条件 |
ignore [断点号]<num> | 在程序执行中,忽略对应断点num次 |
Step | 单步恢复程序运行,且进入函数调用 |
Next | 单步恢复程序运行,但不进入函数调用 |
Finish | 运行程序,直到当前函数完成返回 |
C | 继续执行函数,直到函数结束或遇到新的断点 |
设置断点在gdb的调试中非常重要,下面着重讲解gdb中设置断点的方法。
gdb中设置断点有多种方式:其一是按行设置断点;另外还可以设置函数断点和条件断点。下面具体介绍后两种设置断点的方法。
① 函数断点。
gdb中按函数设置断点只需把函数名列在命令"b"之后,如下所示:
(gdb) b test.c:sum (可以简化为b sum)
Breakpoint 1 at 0x80484ba: file test.c, line 16.
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080484ba in sum at test.c:16
要注意的是,此时的断点实际是在函数的定义处,也就是在16行处(注意第16行还未执行)。
② 条件断点。
gdb中设置条件断点的格式为:b 行数或函数名 if 表达式。具体实例如下所示:
(gdb) b 8 if i==10
Breakpoint 1 at 0x804848c: file test.c, line 8.
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804848c in main at test.c:8
stop only if i == 10
(gdb) r
Starting program: /home/yul/test
The sum of 1-m is 1275
Breakpoint 1, main () at test.c:9
9 n += i;
(gdb) p i
$1 = 10
可以看到,该例中在第8行(也就是运行完第7行的for循环)设置了一个"i==0"的条件断点,在程序运行
- Linux下C编程基础之:常用编辑器(08-13)
- Linux下C编程基础之:gcc编译器(08-13)
- Linux下C编程基础之:make工程管理器(08-13)
- Linux下C编程基础之:使用autotools(08-13)
- Linux下C编程基础之:实验内容(08-13)
- Linux下C编程基础之:本章小结与思考与练习(08-13)