零基础学C语言(第4版)
上QQ阅读APP看书,第一时间看更新

2.4 调试排错(debug)

程序员的主要工作之一是编写代码。代码从无到有,需要逐个字符输入,工作量显然比较大。但实际上,编码容易调试难。代码编写完毕后,程序员将会花费大量时间进行错误或者问题的排查、修改。在计算机系统程序中,把隐藏着的一些未被发现的缺陷、问题或者错误,统称为bug。

说明 本节仅向读者展示最基本的调试手段。

2.4.1 debug的由来

bug的英文意思是臭虫,被引入到计算机领域,需要追溯到第一代计算机时代。当时的计算机是由许多真空管构成的,需要利用大量的电力使真空管发光。某天,一只虫子爬进了其中的某个真空管中,导致计算机停止了工作。研究人员耗费很长时间,找来找去,一处地方一处地方地排查,最后终于发现了这个“虫子”。取出“虫子”后,计算机就恢复了正常。于是bug这个词语在计算机领域中成了隐藏的错误、缺陷、漏洞或者问题的代名词。而排除错误的过程则被称为debug。

调试水平的高低,在很大程度上显示出程序员能力的高低。可以说,不会调试的程序员,就不会开发出好的软件。调试的方法也五花八门,各有特色。

调试需要在调试器中进行。一般的编程环境中已经集成了调试器。为了调试程序,需要在编译连接的时候进行一些设置,使得程序生成的时候,加入一些帮助调试的相关数据。利用调试器运行程序后,就进入了调试模式。

2.4.2 设置断点

断点是为了方便程序员在调试过程中观察程序内部各状态而专门设置的一种调试手段。也就是在调试模式下运行程序的过程中,当程序语句运行到设置的断点处后,暂停程序运行,但是当时的内存、寄存器、上下文环境等数据都被保持,并且在源代码编辑器中指示出当前停留在代码的哪一行。然后程序员就可以不慌不忙地利用调试器查看程序的内部状态了。

注意 先进入调试模式,再设置断点。要想调试程序,设置断点后,程序才能被中断回到调试器中,才能对程序进行各状态的查询。

要在CodeBlocks中设置断点,首先将光标移到需要设置断点的代码行上,使用鼠标左键单击,或者在弹出的菜单中单击【添加断点】命令。断点设置后,代码行前有一个红色的圆点出现,如图2-12所示。在已经设置断点的代码行再次使用鼠标左键单击,或者在弹出的菜单中单击【移除断点】命令,即可取消断点。

图2-12 设置断点

2.4.3 调试运行

设置完断点后,可以通过按F8键在调试器中启动已编写的程序。程序启动后,当运行到断点代码行后,程序暂停,如图2-13所示。

图2-13 调试:运行中断

(1)此时读者编写的程序已经被运行起来,只是处于暂停状态。可以看到运行窗口后面那个黑色的控制台窗口中此时没有任何输出,因为当前仅运行到“{”这一行,这一行什么都没有做。

(2)按F7键可单步运行。每按一次F7键,就往下运行一行代码,直到程序运行结束。如果不想单步运行,可以直接按F8键接着运行下去。

(3)运行结束,调试器弹出窗口提示运行结束,返回代码窗口。