白禾二少

静水流深

导航

GDB笔记(1)

常用命令

l  l命令相当于list,从第一行开始列出源码

直接回车  直接回车表示,重复上一次命令

brek 16(行号)\func(函数名) 设置断点,在源程序第16行处\在函数func()入口处

info break 查看断点信息

r   运行程序,run命令简写

c  继续运行程序,continue命令简写

p i   打印变量i的值,print命令简写

bt  查看函数堆栈

finish 退出函数

 退出gdb

break +offset / -offset  在当前行号的前面或后面的offset行停住。offiset为自然数。

break ... if <condition>...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if i=100,表示当i为100时停住程序。

watch <expr>   为表达式(变量)expr设置一个观察点。一表达式值有变化时,马上停住程序。

rwatch <expr>    当表达式(变量)expr被读时,停住程序。
awatch <expr>    当表达式(变量)的值被读或被写时,停住程序。

delete [breakpoints] [range...]删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为d

disable [breakpoints] [range...]disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止点。简写命令是dis.

enable [breakpoints] [range...]   enable所指定的停止点,breakpoints为停止点号。

enable [breakpoints] once range...   enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动disable。

enable [breakpoints] delete range...   enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动删除

step <count>
单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有debug信息。很像VC等工具中的step in。后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住。

next <count> (简写为n)
同样单步跟踪,如果有函数调用,他不会进入该函数。很像VC等工具中的step over。后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住

set step-mode on

打开step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码。

set step-mod off
关闭step-mode模式。
until 或 u
当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
stepi 或 si     nexti 或 ni
单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。与之一样有相同功能的命令是 “display/i $pc” ,当运行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)

注意事项
1.如果想使用GDB,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g参数

2.gdb中可以设置观察点(watch point)来观察某个表达式的值,如果有变化,马上停住程序。不过要注意观察点必须在程序运行以后设置,否则不能成功。

快捷方式

1.敲入b后按两次TAB,你会看到所有b打头的命令。

2.M-?和“按两次TAB键”是一个意思

 

 

posted on 2011-10-11 17:22  白禾二少  阅读(147)  评论(0)    收藏  举报