VC调试技术程序错误类型大致可分为语法错误和逻辑错误两种类型。语法错误可以通过编译器的错误消息更正。但是,逻辑错误是不可能的,因此在每个主要集成开发环境(IDE)中分析和消除程序中的逻辑错误,消除逻辑错误的过程也称为调试(或调试),并描述了VC 6.0调试环境。
常用的调试命令如下:
Step into命令快捷方式:F11逐步执行每条语句。函数发生时,进入函数并单步执行该语句。
Step over命令快捷键:F10逐步执行每个语句,但当函数出现时,系统会将函数作为“一个语句”执行,以自动执行内容,而不是在函数内逐步执行。
Run to cursor指令捷径:Ctrl F10系统会自动在使用者游标指向的陈述式之前执行。(此功能有助于集中关注有问题的地方,从而节省调试时间。)。
Go命令快捷键:F5系统编译、链接、自动运行程序,但程序在设置断点的位置停止。
BuildExcute命令快捷键:Ctrl F5系统提供Pause,可以编译、链接、执行编译后的程序代码、不停留在中断点,但在程序执行结束后,用户可以轻松观察输出。
Stop debug命令快捷方式:Shift F5此命令用于终止动态调试过程。
动态调试的主要方法——watch程序编译通过后,如果使用step into、step over、run to cursor和go命令在程序运行过程中停止系统,系统将进入调试状态。
调试过程中,程序运行窗口将在后台发送,程序将显示在系统窗口中。其中黄色箭头指向系统下一步要执行的语句。系统窗口下面的监控窗口就是我们要介绍的重点。watch窗口左右分为两部分。左侧部分暂时称为“自动监视区域”(即variable窗口),右侧部分称为“手动监视区域”。(watch窗口)自动监视区域是系统自动跟踪的变量名。默认情况下,系统显示auto标记,该标记显示在执行上一步期间程序中更改的变量。Locals标记跟踪函数中的所有变量。
上面的find sourse组合框表示当前在locals标记下跟踪的变量所属的函数。说明:如果find sourse组合框的内容变成灰色,则说明系统正在运行程序或等待输入端的数据(通常在这种情况下),因此要注意程序运行窗口的内容。但是,一般来说,受自动监视区域监视的变量是不够的。有时需要自己定义需要跟踪的变量——。在这种情况下,必须在“手动监控”区域中输入变量名(系统合法识别的表达式),以跟踪所需的值。
注意:如果用户定义了指向数组的watch,则变量左侧会出现一个小''符号,表示数组可以“扩展”——,以显示其中每个下标表示的内容。这与其他高级语言的IDE略有不同。
VC的人性化设置:如果有很多用户定义的变量,则通常需要滚动屏幕才能看到所有变量——VC。
设置断点和一些基本调试技术断点(breakpoint)是指调试期间,每当在断点上执行时自动停止(除非使用bulidexcute命令),否则执行编译后的代码。严格地说,不被认为是调试命令)。通常与go和step over命令一起使用
如何设置断点:在程序代码中,转到需要设置断点的行,然后按F9键,代码行左端将出现红点——。这是VC断点的标志。以后的程序在调试期间每次运行时都会在此处停止,因此用户可以轻松地观察watch的内容。删除断点的命令与设置断点的命令相同。如果在设置断点的地方再次按F9键,左端的红点将消失,断点将被删除。有时我们不需要断点,但不需要“临时”。此时,如果在设置断点的位置按Ctrl F9键,您将看到原始实心点变为空圆3354断点。恢复断点的功能也是按Ctrl F9键。当程序很长,需要大量断点时,此功能特别有用。
条件断点技术——实际上是在一些分支语句内部设置断点。当程序的一个部分有问题时,此技术特别有用。断点设置位置信息这个因人而异,可以说是相当艺术的内容。我不想再说了,但有一个基本原则可以说是断点,所谓断点,或者说是“分段”点。也就是说,在需要连续观察的地方,必须使用step over或step into命令。(阿尔伯特爱因斯坦,美国作家)。
嗯,调试命令基本上就是这些。我想谈谈调试过程中我个人的经验和体会。
1.动态调试不是万能的。动态调试几乎可以解决所有非算法问题,但动态调试花费了很多时间,这也是毋庸置疑的——,会干扰程序员的思维。其实相当多的错误往往是因为按错了键盘。这个错误在动态调试中很难发现,所以在开始调试每个程序之前,必须再次整理思路,仔细阅读程序。用所谓的“静态错误”的方法,可以先解决几个明显的低级错误,确认调试的重点。这样不仅可以大大缩短调试时间,还可以更加包容自己
易发现一些思路方面的错误。2.调试时思路要跟着程序转。说白了就是要集中精力于正在调试的语句段和正在变化的变量上。
3.模块化能有效缩短调试时间。其实模块化不仅仅能有效的缩短开发时间,更能有效的缩短调试时间。首先,模块化使得我们够方便的使用step over命令,而减少断点的设置。其次,程序出错的地方往往就是在几个关键点上,使用了模块化设计思路以后,我们就可以集中精力在那些关键点上,省去了不必要的单步调试。当然,能面向对象就更好了。
4.多用断点和run to cursor命令,减少单步调试的使用——那样太费时间了。
5.调试不要破坏程序的原本结构。许多人喜欢在调试过程中输出一些中间变量的值,认为这样做比较直观——当然,这也是一个很重要的手段,尤其在反复递归和循环嵌套的时候。不过我不推荐在非递归的程序中使用这种方法。这种方法最大的问题就是破坏了程序原本的结构和逻辑,除非你在原本程序设计时就想到这一点。这点在程序很长或者思路很复杂时尤为明显。否则为什么所有的编译模式的程序语言都不约而同的提供了watch这一手段?解释模式的程序语言?那是没有办法……
6.遇到bug时不要急于修改程序。也就是不要乱打补丁。道理和第5条一样,要先仔细分析,然后在决定是否要修改——总之,要冷静。尤其是删除程序段的时候,我建议先把认为不需要的程序段先注释掉。等到调试成功后再删不迟。
1.《【vc60教程】VC 6.0单步调试》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【vc60教程】VC 6.0单步调试》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2505776.html