微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux下C编程基础之:gdb调试器

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

时间:08-13 来源:3721RD 点击:

令,就可键入"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"的条件断点,在程序运行

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top