1)单步调试: n (next), s(step 跟n的区别,s进入到函数内)
2)恢复操作:c(continue) 直到遇到下个断点
3)临时断点: tbreak 有效期,第一次遇到
4)检查变量:p (printf)
5)监视点:watch 当监视点的值发生变化时停止
6)查看栈:bt(backtrace) 显示整个栈的内容。
7)看已经设的断点: ib(info break)
8)设置断点:break function, break line_number, break filename:line_number, break filename:function
9)删除断点: delete+数值标识符(从第7点可得到) (不加参数,删除所有断点), clear使用跟第8点对应
10)禁用断点:disable+数值标识符 (重新启用 enable)
11)在单步时跳出函数:finish
12)在单步时跳出循环:until
13)条件断点:break break-arg if (condition),例: break main if argc > 1
14)断点命令列表(到断点自动执行):
commands breakpoint-number 例子:commands 1
... >printf "i = %d", i
commands >end
...
end
a) 在commands 中加入silent,过滤到其他无用的输出。
b) 最后一个commands是continue的话,自动continue。
例:comands 1
> silent
> printf "i = %d", i
> continue
> end
15)查看局部变量:info locals 得到当前栈中所有局部变量的值列表
16)设置变量:set x=12
17)GDB线程命令:
a) info threads(给出当前所有的线程信息)
b) thread 3(切换查看线程)
c) break 88 thread 3(当线程3到达源代码行88时停止执行)
d) break 88 thread 3 if x == y
e) thread apply all bt,查看所有的线程的栈信息。
18) 您可以以进程ID作为第二个参数,以调式一个正在运行的进程
gdb 程序名 1234
注意点:
1)重新编译文件时不要退出gdb,断点可以保存着。
2)在调试时不要开启优化代码的选项,不然经过了优化,设置的断点的位置跟编译后的位置相差可能很大。