l(list) [行号|函数名|xx.c:行号] : 列出源码
list :当前行后面的源码
list -: 当前地前面的源码

回车 : 重复上一次命令
b(break) [+|-]{行号|函数名}:  在某行的前或后设置断点,没有参数时在下一条指令处停止
break if ... : 条件暂停 例break if i=1
info break [n] : 查看断点,n为断点号
r(run) : 运行程序
start : 开始调试
n(next) [n] : 相当于step over, 单条语句执行,可以设置条数
step [n] : 相当于step into,可以设置条数
c(continue) : 继续运行程序
u(until) : 退出循环体
p(print) 变量 : 打印变量的值
x 按十六进制格式显示变量。  
d 按十进制格式显示变量。  
u 按十六进制格式显示无符号整型。  
o 按八进制格式显示变量。  
t 按二进制格式显示变量。  
a 按十六进制格式显示变量。  
c 按字符格式显示变量。  
f 按浮点数格式显示变量。
  
print [var] 变量=x : 修改变量值,与gdb内部命令冲突里加var
printf "%s%d...", a, b...  : 格式化打印
display/undisplay 表达式: 自动显示一个变量或表达式
finish : 退出函数
bt(backtrace): 查看函数堆栈
f(frame) n : 栈的第n层
up/down [n]: 上下移动栈
 
q(quit) : 退出gdb
jump [line|file:line]: 跳到某行继续执行 
signal : 产生一个信号
return : 强制函数返回,忽略没有执行的语句
call : 强制调用函数
 
shell : 执行shell命令
make : 等价等shell make
 
forward-search/search/reverse-search: 搜索源码,支持正则
 
///////////////////////////////////////////////
作用域
file::variable  
function::variable
显示数组
p(print) *array@len 
 
////////////////////////////////////
设置观察点(WatchPoint)  
 
观察点一般来观察某个表达式(变量也是一种表达式)的值是
否有变化了,如果有变化,马上停住程序。我们有下面的几种
方法来设置观察点:  
 
watch  
为表达式(变量)expr 设置一个观察点。一量表达式值有变
化时,马上停住程序。  
 
rwatch  
当表达式(变量)expr被读时,停住程序。  
 
awatch  
当表达式(变量)的值被读或被写时,停住程序。  
 
info watchpoints  
列出当前所设置了的所有观察点。  
 
 
////////////////////////////////////
设置捕捉点(CatchPoint)  
 
你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享
库(动态链接库)或是 C++的异常。设置捕捉点的格式为:  
 
catch  
当 event 发生时,停住程序。event可以是下面的内容:  
1、throw 一个 C++抛出的异常。 (throw 为关键字)  
2、catch 一个 C++捕捉到的异常。 (catch 为关键字)  
 
/////////////////////////////////
维护停止点  
 
上面说了如何设置程序的停止点,GDB 中的停止点也就是上述
的三类。在 GDB 中,如果你觉得已定义好的停止点没有用了,
你可以使用 delete、clear、disable、enable 这几个命令来
进行维护。  
 
////////////////////////////
线程(Thread Stops)  
 如果你程序是多线程的话,你可以定义你的断点是否在所有的
线程上,或是在某个特定的线程。GDB 很容易帮你完成这一工
作。  
thread : 切换线程
 
break thread  
break thread if ...  
linespec 指定了断点设置在的源程序的行号。threadno 指定
了线程的 ID,注意, 这个 ID是 GDB 分配的, 你可以通过“info 
threads”命令来查看正在运行程序中的线程信息。如果你不
指定 thread 则表示你的断点设在所有线程上面。你还可以为
某线程指定断点条件。如:  
 
(gdb) break frik.c:13 thread 28 if bartab > lim  
 
当你的程序被 GDB 停住时,所有的运行线程都会被停住。这方
便你你查看运行程序的总体情况。而在你恢复程序运行时,所
有的线程也会被恢复运行。那怕是主进程在被单步调试时。