十、程序调试
程序调试在程序设计学习过程中是必不可少的。最基本的调试方法是在必要的地方添加输出语句,通过输出结果来查看错误所在。下面介绍的是通过设置断点,单步执行,监视变量的方法。为增强程序的可读性,需要规范代码缩进格式,方法是选中所需要规范的代码,按shift+F8。
编译微型条如下图所示:
当进入调试状态时,调试(Debug)工具条如下图所示:
当进入调试状态时,调试菜单如下图所示:
调试程序的过程如下: 1、设置断点
进行调试的第一步就是要设置断点。设置断点的方法:把光标放在程序的某一行上,再按 F9 或单击编译微型条中的2、调试运行
按 F5 或编译微型条中的
就进入调试运行状态。如果按照上述操作,可
按钮。
以使程序运行停在断点处。然后按F10单步执行,若在函数调用时要进入函数中执行,则可以按F11,或同时在函数定义中设置断点。 3、变量查看窗口
“Watch 窗口”是用来在调试状态下,查看变量值的。把需要监视的变量等添加Watch 窗口中,就可以查看其值。 4、停止调试
点击Debug 工具条或调试菜单上的停止调试(Stop Debugging)选项或按Shift+F5 。
调试菜单中常用的功能如下: 1、
Go (F5 ):此功能将全速执行程序直到遇到一个断点或程序结束,或直
到程序暂停等待用户输入。 注意,此功能最能有效的调试循环,常将断点设置
在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化。 2、
Restart (Ctrl+shift+F5 ): 此debugger功能将从程序的开始(第一有
效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger 会自动停在程序的main()开始处。这时如果选择Step Over(F10)就可以逐步执行main()函数了。 3、
Stop Debugging (Shift+F5 ):此debugger功能将终止(所有)调试,并
返回到常规编辑状态. 4、
Step Into (F11 ):此功能可以单步进入到在调试过程中所跟踪的调用
函数的语句的函数内部(例如,当前语句是\选择Step Into(F11)后,Debugger将进入Show()函数内部并停在Show)函数内部的第一条语句上),在函数中可以Step Over(F10)对该函数进行单步调试。 5、
Step Over (F10 ):此功能可以单步对所在函数单步调试,如果调试的语
句是一个调用函数的语句时, Debugger将全速执行所调用的函数,单步(一步)通过所调用的函数,Debugger停该调用语句的下一条语句上。 6、
Step Out (Shift+F11 ):此功能将使Debugger切换回全速执行到被调
用函数结束,并停在该函数调用语句的下一条语句上。当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数. 7、
Run to Cursor (Ctrl+F10 ):此功能将全速执行到包含插入点光标所在
的行,可以作为在插入点光标处设置常规断点的一种选择。注意,当光标处不是一个有效的执行语句时此功能将不起作用。
调试中常用的快捷键如下:
1、CTRL+F7:Compile(编译,生成.obj文件)。
2、F7:Build(组建,先Compile生成.obj,再Link生成.exe) 3、CTRL+F5:运行.exe。
4、F9:在光标处设置或取消设置断点。 5、F5:开始调试。 6、F11:单步进入。 7、F10:单步跳过。 8、SHIFT+F11:单步跳出。 9、CTRL+F10:运行到光标处。
10、CTRL+SHIFT+F9:清除所有断点。
VC6下编写C/C++程序,产生的常见编译错误和警告信息如下: 1、 'xxxx' : undeclared identifier,标识符“xxxx”未定义。
2、 'xxxx' : redefinition, “xxxx”重复定义; “xxxx”在同一作用域中定义了多次。
3、missing ';' before (identifier) 'xxxx',在(标志符)“xxxx”前缺少分号。
4、'xxx' : must return a value, “xxx”必须返回一个值;函数声明了有返回值(不是void),但函数实现中忘记了return 返回值。
5、local variable 'xxx' used without having been initialized,局部变量“xxx”在使用前没有被初始化。
6、unknown character '0x##',未知字符‘0x##’;可能是代码中含有中文标点符号。
7、too many characters in constant,字符常量中的字符太多了;可能的原因是用单引号中字符数多于4个,或者字符常量缺少右单引号。
8、empty character constant,空的字符定义;两个单引号中没有任何字符。 9、newline in constan,在常量中出现了换行;可能的原因有: (1)字符串常量、字符常量中有换行。
(2)某个字符串常量的尾部是否漏掉了双引号。
(3)某个字符串常量中是否出现了双引号字符“\”,但是没有使用转义符“\\\”。 (4)某个字符常量的尾部是否漏掉了单引号。
(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。 (注:本节内容主要参考网络资源。)