调试的过程
我们在eclipse中来看一下一般调试的过程:
1、debug模式编译
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
2、打上断点
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
3、执行调试
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
4、单步调试
step into:跳到函数体内部
step over:不跳到函数体内
step return:执行完当前函数
5、继续执行
continue
6、打印和监控值
GDB调试
先写一段C++的代码,代码内容例如以下:
使用debug模式编译:
进入Debug调试模式:
1、打断点,打断点的方式例如以下(GDB中的命令能够使用首字母来替代,比方break和b的作用同样)
break 函数名
break 行号
break 文件名称:行号
break 行号 if条件
通过info break能够查看断点,通过delete能够删除断点,以下我们使用list命令查看源文件,然后打断点
查看断点
能够看到眼下有一个断点,他的编号为1,在第四行;以下用法名打一个断点
2、開始执行(run) ,能够使用continue来继续向下执行,使用quit退出执行状态
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
能够看到在执行的时候停到了断点处
3、单步调试,但步调试分别相应例如以下三个命令
next------step over
step-----step into
finish-----step return
以下我们再来调试一段程序代码。代码内容和输出结果例如以下:
输出结果为:
这段代码在没有输出结果之前有些朋友可能会觉得正确结果应该是50.5,以下我们就通过调试来看一下哪里出了问题
能够看到我们在第五行打了一个断点,当执行到第五行的时候事实上该行并未执行,所以此时i的值是一个无效的值。
在上面我们使用了watch来观察变量i当i发生改变后就会显示i改变后的值,能够看到我们next后变量i的值变为0.01,以下我们使用条件断点来调试
能够看到在i循环到98次的时候实际的值并非0.98而是比0.98大,我们next到第100次循环能够看到
此时条件不满足i==1,所以仅仅能执行99次循环,结果就是49.5而不是50.5
输入wi能够方便我们调试
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />