技术源于生活

努力学习新技术

GDB简单使用手册

1.   主程序:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#include <stdio.h>

 

void emit(int i);

 

int main(){

    int a = 0;

    int i;

    for(i=0;i<10;i++){

        emit(i);

    }

    printf("Exit");

    return 0;

}

 

void emit(int i){

    printf("i is %d/n",i);

}

 

2.   编译

为了能生成可以使用GDB进行调试的程序,我们需要增加“-g”选项。gcc –g test.c –o test.out

 

3.   调试

a)        程序装入

可以使用两种方法装入程序:

                      i.              直接从命令行装入代调试程序,如:gdb test.out

nickcen@susecompaq:~/test > gdb test.out

GNU gdb 5.0rh-5 Red Hat Linux 7.1

This GDB was configured as "i386-redhat-linux"...

(gdb)

 

                   ii.              gdb装入,即通过file test.out,装入程序:

nickcen@susecompaq:~/test > gdb

GNU gdb 5.0rh-5 Red Hat Linux 7.1

This GDB was configured as "i386-redhat-linux".

(gdb) file test.out

Reading symbols from test.out...done.

(gdb)

 

b)        程序启动

我们可以通过“run(r)”命令来启动程序:

(gdb) r

Starting program: /data1/users/nickcen/test/test.out

i is 0

i is 9

Exit

Program exited normally.

(gdb)

 

c)        显示程序:

我们可以通过“list(l)”来显示源代码,以便设置断点,“list”命令每次显示10行源代码。“list”命令可以带行号作为参数,即“l 10”表示从第10行开始,显示。

(gdb) l

1       #include <stdio.h>

2

3       void emit(int i);

4

5       int main(){

6           int a = 0;

7           int i;

8           for(i=0;i<10;i++){

9               emit(i);

10          }

(gdb)

 

d)        设置断点:

我们可以通过“break(b)”命令来设置断点。“break”命令可以用行号,函数名,或者表达式的名称作为参数。

(gdb) b main

Breakpoint 3 at 0x8048416: file test.c, line 6.

(gdb) b 9

Breakpoint 4 at 0x8048430: file test.c, line 9.

(gdb)

 

e)        显示所有断点:

我们可以通过“info b”命令,来显示所有已经设置的断点。

(gdb) info b

Num Type           Disp Enb Address    What

3   breakpoint     keep y   0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />08048416 in main at test.c:6

4   breakpoint     keep y   0x08048430 in main at test.c:9

 

f)        禁用/启用断点:

我们可以通过“disable”和“enable”命令来禁用和启动断点,这两个命令的参数都是断点的编号。

 

(gdb) info b

Num Type           Disp Enb Address    What

3   breakpoint     keep y   0x08048416 in main at test.c:6

4   breakpoint     keep y   0x08048430 in main at test.c:9

(gdb) disable 3

(gdb) info b

Num Type           Disp Enb Address    What

3   breakpoint     keep n   0x08048416 in main at test.c:6

4   breakpoint     keep y   0x08048430 in main at test.c:9

(gdb) enable 3

(gdb) info b

Num Type           Disp Enb Address    What

3   breakpoint     keep y   0x08048416 in main at test.c:6

4   breakpoint     keep y   0x08048430 in main at test.c:9

(gdb)

 

g)        删除断点:

我们可以通过“clear”和“delete(d)”命令来删除断点。其中“clear”的参数值与“break”同,只能是函数名,行号,表达式等,而“delete”命令的参数值,则是断点的编号。

(gdb) info b

Num Type           Disp Enb Address    What

5   breakpoint     keep y   0x08048416 in main at test.c:6

6   breakpoint     keep y   0x08048430 in main at test.c:9

7   breakpoint     keep y   0x08048466 in emit at test.c:16

(gdb) clear 9

Deleted breakpoint 6

(gdb) d 7

(gdb) info b

Num Type           Disp Enb Address    What

5   breakpoint     keep y   0x08048416 in main at test.c:6

(gdb)

 

h)        断点操作:

我们可以通过“step(s)”和“next(n)”命令进行断点的执行。其中“step”表示单步进入,而“next”表示单步执行。

(gdb) n

main () at test.c:8

8           for(i=0;i<10;i++){

(gdb) n

9               emit(i);

(gdb) n

i is 5

8           for(i=0;i<10;i++){

(gdb) n

9               emit(i);

(gdb) s

emit (i=6) at test.c:16

16          printf("i is %d/n",i);

(gdb) n

i is 6

17      }

(gdb) n

main () at test.c:8

8           for(i=0;i<10;i++){

(gdb)

 

i)        打印变量值:

通过“print(p)”命令,我们可以打印出某一变量的值。

(gdb) p i  

$1 = 6

(gdb)

 

j)        打印栈中的值:

通过“backtrace(bt)”我们可以打印出当前栈中的值。

(gdb) bt

#0  main () at test.c:9

#1  0x40054c6f in __libc_start_main () from /lib/libc.so.6

(gdb)

 

k)        退出

我们可以通过“quit(q)”命令退出当前的调试环境。

(gdb) q

nickcen@susecompaq:~/test >

 

l)        使用帮助

我们可以使用“help”命令获取帮助。其中“help”的参数值为需要帮助的内容。

(gdb) help breakpoints

Making program stop at certain points.

 

List of commands:

 

awatch -- Set a watchpoint for an expression

break -- Set breakpoint at specified line or function

xbreak -- Set breakpoint at procedure exit

 

Type "help" followed by command name for full documentation.

Command name abbreviations are allowed if unambiguous.

(gdb)

阅读更多
个人分类: 随便写写
上一篇JFace备忘
下一篇J2SDK 1.4中的新功能类
想对作者说点什么? 我来说一句

gdb使用手册下在资料

2008年12月25日 252KB 下载

GDB 使用手册(中文)

2011年05月14日 967KB 下载

gdb 使用手册 说明文档

2017年10月30日 2.5MB 下载

GDB中文手册完美版.pdf

2014年08月28日 350KB 下载

GDB 调试 使用手册

2010年04月07日 206KB 下载

Debugging with GDB

2014年12月08日 2.36MB 下载

GDB使用手册

2011年09月19日 366KB 下载

gdb使用

2008年06月29日 836KB 下载

gdb使用手册文档pdf

2017年07月26日 2.4MB 下载

没有更多推荐了,返回首页

关闭
关闭