首页 > 代码库 > 再探gdb常用命令

再探gdb常用命令



前面已经有了一篇对gdb常用命令的总结,见 http://blog.csdn.net/u011848617/article/details/12838875 

这里对目前学过的gdb命令进行了较完整的整理。


1、使用gdb调试代码,就要在编译时添加-g选项。

2、gdb -q —————— 启动gdb时不输出版权说明

3、gdb打开文件:
  (1)gdb filename;
  (2)先输入gdb,然后在gdb命令行输入file filename。

4、gdb选项(gdb中好多命令都有自己的简写字母):
   不输入直接回车 ------------ 重复执行上一条命令
   q(quit) ------------------- 退出gdb
   file filename ------------- 打开文件filename
   l(list) ------------------- 显示10行代码,若再次运行则显示接下来10行代码
   list 5,10 ---------------- 显示第5到10行的代码
   list test.c:5,10 -------- 显示源文件test.c中第5到10行的代码
   list get_sum -------------- 显示get_sum函数周围的代码
   list test.c:get_sum ------- 显示源文件test.c中get_sum函数周围的代码
   shell XXX ----------------- 运行shell命令XXX
   search/forward str -------- 从当前行向前查找第一个匹配的字符串str
   reverse-search str -------- 从当前行向后查找第一个匹配的字符串str
   r(run) -------------------- 运行程序
   help XXX ------------------ 查看命令XXX的使用方法
   help all ------------------ 查看所有命令的使用方法
   whatis 变量或表达式 ------- 显示变量或表达式的数据类型
   set variable 变量=值 ------ 给变量赋值
   kill ---------------------- 结束当前程序的调试
   continue ------------------ 让程序继续执行,直到下一个断点或者运行完为止
   n(next) ------------------- 继续执行下一条语句,遇到函数把函数当作一条语句来执行
   step ---------------------- 继续执行下一条代码,遇到函数会跟踪进入函数
   nexti/stepi --------------- 单步执行一条机器指令
   watch 变量名 -------------- 设置变量监测点
   bt(backtrace) ------------- 显示程序当前运行位置和对当前位置的栈跟踪
   display 变量或表达式 ------ 添加观察点,以后每次运行命令都会显示对应变量或表达式的值
   undisplay num ------------- num为设置的display编号,可以用info display获取,不能用变量名

5、设置断点:
   b(break) 行号 ----------------------- 在第n行设置断点
   break fun_name ---------------------- 为函数fun_name设置断点
   break 行号或函数名 if 条件 ---------- 程序在运行中,当条件满足时,在某行中断暂停执行
   watch 条件表达式 -------------------- 程序运行中,满足条件时暂停执行,不需要写行号
   info breakpoints -------------------- 查看当前所有的断点
   disable 断点编号 -------------------- 使断点n失效
   enable 断点编号 --------------------- 使断点n有效
   clear ------------------------------- 删除本行断点(如果存在的话)
   clear 行号 -------------------------- 删除此行断点
   clear 函数名 ------------------------ 删除该函数的断点
   delete 断点编号 --------------------- 删除指定编号的断点

6、print命令:
   print XXX ------------------------------- 打印输出XXX的值
   print 变量 = 值 ------------------------- 对变量赋值
   print 表达式@要打印值的个数n ------------ 打印以表达式值开始的n个数

7、watch和display设置监测点的区别:
   watch监测只有当监测的变量值发生变化时才显示变量,而且旧值和新值都会显示。
   display监测每一次运行命令都会显示变量的值,只会显示变量的最新值。