UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。-百度百科
gdb的功能
- 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
- 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
- 当程序被停住时,可以检查此时你的程序中所发生的事。
- 你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
调试基本指令
总结了常见的(用过的)指令。
-
-g
:使用该参数编译可以执行文件,得到调试表。例:gcc hello.c -o main -g
(ll
查看 main 变大了 ) -
gdb ./main
进入调试界面 -
list/l
:list
1
列出源码。根据源码指定 行号设置断点。(一直list
可以显示全部的代码信息) -
b
:b 20
在 20 行位置设置断点。 -
run/r
: 运行程序(和b
配合使用 就是转单断点处) -
n/next
: 下一条指令(会越过函数) -
s/step:
下一条指令(会进入函数) -
p/print
:p i
查看变量的值。 -
continue
:继续执行断点后续指令。(可以理解成跳到下一个断点) -
finish
:结束当前函数调用 -
quit
:退出gdb调试 -
run
:使用run查找段错误出现位置(会在段错误位置停下来) -
set args
: 设置main
函数命令行参数 (在start、run
之前)例:set args 11 22 33
-
run
字串 1 字串 2 …: 设置 main 函数命令行参数(方式二) -
info b
: 查看断点信息表
-
b 20 if i = 5
: 设置条件断点 (这个主要用在 循环, 我们要在第几次循环停下来) -
ptype
:查看变量类型。 -
bt
:列出当前程序正存活着的栈帧(就是关于作用域的问题 ,不懂栈帧自寻查找) -
frame
: 根据栈帧编号,切换栈帧。(主要是你要查看另外一个栈中变量的地址,那就只能切换栈帧过去看) -
display
:设置跟踪变量(很方便 如果你每次要打印) 例:display i
每次n就能显示i的值 -
undisplay
:取消设置跟踪变量。 使用跟踪变量的编号
常见错误
-
使用单步进入系统的调用函数,我们要使用
until
+行号跳到要执行的行号处 -
gcc
编译没有 加-g
的参数
总结
上述的指令都有测试使用过,如有错误,欢迎指出。