GDB笔记(1)
常用命令
l l命令相当于list,从第一行开始列出源码
直接回车 直接回车表示,重复上一次命令
brek 16(行号)\func(函数名) 设置断点,在源程序第16行处\在函数func()入口处
info break 查看断点信息
r 运行程序,run命令简写
c 继续运行程序,continue命令简写
p i 打印变量i的值,print命令简写
bt 查看函数堆栈
finish 退出函数
q 退出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键”是一个意思
浙公网安备 33010602011771号