示例:

gcc -Wall -g simple.c -o simple

一定要记得加上-g选项,以便生成调试信息

  • 启动gdb语法 gdb [-q] [executable-file] [core-file]

  • 运行程序

  • run(r) > 运行程序,直到第一个断点或程序结束

  • run arg1 arg2 … > 运行程序并加上参数

  • 基本操作

操作 作用
list(l)  查看最近10行源码
list fun-name  查看fun函数源码
list file:fun-name  查看file文件中的fun函数源码

如:l search.c:seq_search 如果只有一个文件包含有seq_search函数,则不必加search.c:

  • list [m,n] | 操作 | 作用 | | :----: | ---- | | list 2,10 |  查看从第2行到第10行源代码 | list ,15 |  查看最多到第15行的源代码

  • 设置断点与观察点

break [line-num]

break [fun-name]

break [file-name:line-num] 示例 b search.c:4

break [file-name:fun-name]

break if <condition> - 条件成立时程序停住 E.g. break if i = 10

info break(i b) – 查看断点

  • 设置观察点

watch expr – 一旦expr值发生改变,程序就停住。 E.g. watch i > 一旦i值发生改变,则程序暂停

  • 删除断点

delete n(d n) – 删除断点n d 1 或 d 1 2 3

  • 单步调试

continue(c)

  • 运行至下一个断点

step(s)

  • 单步跟踪,进入函数内部 > 类似于Vs中的step in[但是不会进入没有提供源代码的函数]

    next(n)

  • 单步跟踪,不进入函数内部 > 类似于VC中的step out

  • 运行程序,直到当前函数完成返回。 并打印函数返回时的堆栈地址和返回值及参数值等信息。但是不会跳出main函数。 finish

  • 运行程序直到退出循环体。如果一次没有跳出,则执行下一次 until

  • 停止当前函数,提前让函数返回[动态调整程序的执行] 将value返回调用者,相当于step return return [value]

  • 改变一个变量的值 set variable var-name = value