前提:在gcc编译时,要输入-g选项;

步骤:

1.gdb进入GDB调试模式
2.file 可执行文件名 
3.pwd显示当前目录
4.l列出源码(前提是编译时选择了-g选项)
5.b 行号:设置断点;
  tb 行号 :设置临时性断点,与断点不同,临时断点只在第一次执行时起作用
6.r:开始执行
单步执行:n(TIPs1:可以按回车重复上一次操作,在单步调试时这个feature很有用)。
单步进入:s
继续执行:c(走到下一个断点处)
7.bt:查看当前函数运行的堆栈
8.info 参数:查看相关的信息:例如:info break,info watchpoints
9.watch 变量名:查看变量值
10.finish :退出当前函数
11.quit:退出调试
12.delete breakpoints 2:删除第二个断点
13.disable/enable breakpoints 3 :禁用/启用第三个断点
14. :显示当前栈及其变量

以下内容为转载:
 

/**********************************************************************************
gcc -g  main.c                      //在目标文件加入源代码的信息
gdb a.out       

(gdb) start                         //开始调试
(gdb) n                             //一条一条执行
(gdb) step/s                        //执行下一条,如果函数进入函数
(gdb) backtrace/bt                  //查看函数调用栈帧
(gdb) info/i locals                 //查看当前栈帧局部变量
(gdb) /f                       //选择栈帧,再查看局部变量
(gdb) print/p                       //打印变量的值
(gdb) finish                        //运行到当前函数返回
(gdb) set var sum=0                 //修改变量值
(gdb) list/l 行号或函数名             //列出源码
(gdb) display/undisplay sum         //每次停下显示变量的值/取消跟踪
(gdb) break/b  行号或函数名           //设置断点
(gdb) continue/c                    //连续运行
(gdb) info/i breakpoints            //查看已经设置的断点
(gdb) delete breakpoints 2          //删除某个断点
(gdb) disable/enable breakpoints 3  //禁用/启用某个断点
(gdb) break 9 if sum != 0           //满足条件才激活断点
(gdb) run/r                         //重新从程序开头连续执行
(gdb) watch input[4]                //设置观察点
(gdb) info/i watchpoints            //查看设置的观察点
(gdb) x/7b input                    //打印存储器内容,b--每个字节一组,7--7组
(gdb) disassemble                   //反汇编当前函数或指定函数
(gdb) si                            // 一条指令一条指令调试 而 s 是一行一行代码
(gdb) info registers                // 显示所有寄存器的当前值
(gdb) x/20 $esp                    //查看内存中开始的20个数
*********************************************************************************/

收藏 打印