前言:
程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪。到目前为止我们的调试手段只有一种∶根据程序执行时的出错现象假设错误原因﹐然后在代码中适当的位置插入printf﹐执行程序并分析打印结果﹐如果结果和预期的一样﹐就基本上证明了自己假设的错误原因﹐就可以动手修正Bug了,如果结果和预期的不一样﹐就根据结果做进一步的假设和分析。我们介绍一种非常强大的调试工具gdb,可以完全操控程序的运行﹐使得程序就像你手里的玩具一样﹐叫它走就走﹐叫它停就停﹐并且随时可以查看程序中所有的
目录
gdb调试工具:
1.基础指令:
(1) -g
(2)l/list
(3)b/break
(4)r/run
(5) n/next
(6)s/step
(7)p/print
(8)continue
(9) finish
(10)quit:
2.其他指令:
(1)run
(2)set args
(3)run
(4)info b
(5)b 20 if i = 5
(6)ptype
(7)bt
(8)frame
(9)display
(10)undisplay
gdb调试工具:
大前提:程序是你自己写的。 ---逻辑错误
1.基础指令:
(1) -g
使用该参数编译可以执行文件,得到调试表。
(2)l/list
list 1 : 列出源码,根据源码指定 行号设置断点。
(3)b/break
b 20 在20行位置设置断点。
(4)r/run
运行程序
(5) n/next
下一条指令(会越过函数)
(6)s/step
下一条指令(会进入函数)
(7)p/print
p i 查看变量的值。
(8)continue
继续执行断点后续指令。
(9) finish
结束当前函数调用。
(10)quit:
退出gdb当前调试。
2.其他指令:
(1)run
使用run查找段错误出现位置。
遇到段错误时候直接run,停止的位置就是段错误的位置
(2)set args
设置main函数命令行参数 (在 start / run 之前)
(3)run
字串1 字串2 ...: 设置main函数命令行参数
(4)info b
查看断点信息表
(5)b 20 if i = 5
设置条件断点。
代码执行到 i = 5 时候这个断点才会生效
(6)ptype
查看变量类型。
(7)bt
列出当前程序正存活着的栈帧。
(8)frame
根据栈帧编号,切换栈帧。
(9)display
设置跟踪变量
(10)undisplay
取消设置跟踪变量。 使用跟踪变量的编号。