GDB调试命令(转)

来源:互联网 发布:unity3d人物模型在哪里 编辑:程序博客网 时间:2024/05/17 01:59

1       基本命令1.1    启动和退出GDB

[root@localhost ~]#gdb test

启动GDB调试test程序

 

[root@localhost ~]#gdb programe 2146

启动GDB调试进程号为2146的进程

 

[root@localhost ~]# gdb

(gdb) attach 2146

启动GDB挂载到进程号为2146的进程上开始调试

 

(gdb)detach 2146

释放进程号为2146的进程,终止调试

 

(gdb)set args –a –b123 -c

(gdb)show args

设置和查看被调试程序的启动参数

 

(gdb)run

(gdb)kill

启动和停止当前被调试程序,run命令也可跟参数

 

(gdb)quit

终止调式,退出GDB

 

1.2    查看源代码

(gdb)list 123

查看当前源代码文件中123行及其前后5行的代码

 

(gdb)list abc.cpp : 123

查看源文件abc.cpp中123行及其前后5行的代码

 

(gdb)list foo

查看函数foo起始行及其前后5行的代码

 

(gdb)list abc.cpp : foo

查看源文件abc.cpp中函数foo起始行及其前后5行的代码

 

(gdb)list 0xabcd1234

查看包含0xabcd1234地址的代码行及其前后5行的代码

 

2       流程控制

(gdb)s

单步执行

 

(gdb)n

单步执行,但不展开函数调用

 

(gdb)c

继续执行

 

(gdb)u

执行至循环结束

 

(gdb)u 123

执行至123行

 

(gdb)finish

跳出当前函数

 

(gdb)bt

查看当前函数调用堆栈

 

(gdb)frame 3

跳转到函数堆栈中索引为3的函数上下文


3       查看数据3.1    GDB的数据显示格式

x 按十六进制显示

d 按十进制显示

u 显示32位无符号整型。

o 按八进制显示

t 按二进制显示

a 按地址显示

c 按字符显示

f 按浮点数显示

s 按字符串显示


3.2    查看变量和数组

(gdb)p foo

查看变量foo的值

 

(gdb)p *bar

查看指针bar所指对象内容

 

(gdb)p/x foo

按十六进制查看变量foo的值

 

(gdb)p bar@10

查看数组bar的10个元素

 

(gdb)ptype foo

查看foo的类型定义


3.3    查看内存内容

x命令格式:x/[count][format][size] address

size可以是b(byte), h(halfword), w(word), g(giant, 8 bytes)

 

(gdb)x/10ub ptr

按无符号整形从ptr所指地址开始输出10字节

 

(gdb)x/5xw ptr

按16进制从ptr所指地址开始输出5个字(10字节)

 

4       断点4.1    设置断点

(gdb)b 123

在当前源文件的123行设置断点

 

(gdb)b abc.cpp : 123

在源文件abc.cpp的123行设置断点

 

(gdb)b foo

在全局函数foo设置断点

 

(gdb)b foo::bar

在类foo的成员函数bar设置断点

 

(gdb)b ns::foo::bar

在命名空间ns中的类foo的成员函数bar设置断点

 

(gdb)b 123 if foo == 1 && bar == 0

在当前源文件123行设置断点,并且当foo等于1且bar等于0时才命中

 

4.2    管理断点

(gdb)info b

查看所有断点信息

 

(gdb)d

删除所有断点

 

(gdb)d 2

删除2号断点

 

(gdb)enable 1

打开1号断点

 

(gdb)disable 5

禁用5号断点

 

5       多线程

(gdb)info threads

查看线程表

 

(gdb)thread 2

切换到线程表中索引为2的线程

 

(gdb)b foo 2

在函数foo设置断点,并且只在索引为2的线程中命中

 

(gdb)set follow-fork-mode parent

当fork调用发生时,继续调试父进程

 

(gdb)set follow-fork-mode child

当fork调用发生时,继续调试子进程