1: gcc -g file.c
加上 -g 选项, 生成的可执行文件才能用gdb进行源码级调试
2: 命令help, 可以查看命令类别.
再help 类别, 可以查看类别下有哪些命令.
3: list 命令从第一行开始列出源代码, 一次列出10行
直接敲回车表示重复上一命令.
list命令也可以写出l.
list 函数名 : 列出函数的源代码.
4: start命令 开始执行程序, 并在main函数中变量定义后的第一条语句出停住.
列出的语句为将要执行的语句.
5: 用next(n) 命令一条一条的执行语句.
6: 用step(s)命令执行一条语句, 若有函数则进入函数.
7: backtrace(bt)命令可以查看函数调用的帧栈.
(gdb) backtrace
#0 add_range (low=1, high=10) at newt.c:6
#1 0x000000000040053b in main () at newt.c:14
可以函数add_range由函数main调用, 且传递的参数low=1, high=10.
0表示add_range的帧栈号, 1表示mian的帧栈号.
8: info(i)命令, info locals 可以查看局部变量.
接7中的例子, 要想查看main函数的局部变量, 要先用frame(f)命令, 选择1号帧栈, 然后用info查看
frame 1
info locals
9: print(p) 命令打印变量或表达式的值, 因此可以用于修改变量的值.
10: finish命令, 让程序一直运行至从当前函数返回为止.
11: set var 变量名=expression 修改变量的值.
12: quit(q) 命令退出.
13: display命令, display 变量, 使得在每次执行一步后就自动显示变量的值.
undisplay命令, 取消跟踪显示.
14: break(b)命令, 设置断点, 可以根据行号来设置, 也可以根据函数名来设置.
break ... if ... 当条件满足时才断点.
15: continue(c)命令, 表示连续运行, 而非单步运行.
16: info breakpoints可以查看断点信息, 每个断点都有一个编号.
可以用编号来删除指定断点, "delete breakpoints 编号".
有时不必删除断点, 只需禁用. "disable breakpoints 编号".
用"enable 编号"来启动相应断点.
17: run(r)命令, 从程序头开始运行.
18: x命令, 打印指定存储单元的内容. x /7b input, 表示打印input单元的内容, b表示每字节一组
7表示打印7组.
19: watch, 设置观察点. 断点是程序执行到某一代码行时中断, 观察点是当程序访问某个存储单元
时中断.
同样可以用info watchpoints 来查看设置了哪些观察点.
20: disassemble用于反汇编当前函数或指定函数.
21: si命令可以一条指令一条指令的调试. (step 是一行代码, 一行代码的调试).
22: info registers 可以显示所有寄存器的值.
要显示某一个寄存器的值可用 p $esp. 寄存器名字前要加$.