VC调试技术中的程序错误大致可以分为两种:语法错误和逻辑错误。语法错误可以通过编译器错误消息来纠正。然而,这对于逻辑错误来说是不可能的,因此各大IDE(集成开发环境)都提供了调试功能来分析和消除程序中的逻辑错误。下面我们将提到VC+。 +6.0 引入调试环境。
常用的调试命令包括:
命令快捷键:使用F11 一步运行每条语句。一旦找到函数,系统就进入该函数并一步执行语句。
Step Over命令快捷键:F10 单步执行每条语句,但是当遇到函数时,系统会将该函数作为“语句”执行,并自动覆盖其内容,而无需单步执行进入该函数。
Run to Cursor 命令快捷键:Ctrl+F10 系统自动执行到用户光标所指的语句处。 (这个功能非常有用;它可以让您将精力集中在问题区域并节省调试时间。)
Go命令快捷键:F5 系统编译、连接并自动运行程序,但在程序中设置的任意断点处停止。
BuildExcute命令快捷键:Ctrl+F5 系统对编译好的程序代码进行编译、连接、执行,因此不会停留在断点处,而是在程序运行完毕后,系统允许用户方便地运行Pause,这样你可以。观察输出结果。
停止调试命令快捷键:Shift+F5 该命令用于终止动态调试过程。
动态调试的主要方法是——watch(监视变量)。程序编译通过后,如果在程序运行过程中使用step into、step over、run tocursor、go命令停止系统,则系统进入调试状态。
调试过程中,程序的执行窗口移至后台,程序显示在系统窗口中。黄色箭头指向系统将执行的下一条语句。位于系统窗口下方的监控窗口是本次讨论的重点。监视窗口分为两部分,左侧部分称为“自动监视区域”(或变量窗口)。 “自动监控区域”(可变窗口)简称“手动监控区域”。自动监视区域(例如监视窗口)是系统自动跟踪的变量名称。系统默认显示自动标签。这将显示在上一步执行期间程序中更改的变量。 locals 标签跟踪函数内的所有变量。
上面的源搜索组合框显示了当前在locals 标记中跟踪的变量属于哪个函数。注意:如果“搜索源”组合框的内容为灰色,则表示系统正在运行程序或等待来自输入端的数据(通常是这种情况)。在程序执行窗口中。然而,自动监测区域监测的变量通常是不够的。在某些情况下,您可能需要定义需要跟踪的变量。这时需要在手动监控区域输入变量名。这也可能是系统认为追踪期望值合法的表达式。
注意:当用户定义一个指向数组的watch时,变量的左边会出现一个小“+”号,表示可以“扩展”数组以显示每个下标代表的内容。它与其他高级语言IDE 略有不同。
值得一提的是VC++的人性化设置。如果您有许多用户定义的变量,则通常需要滚动才能查看全部变量。这里,VC++在手动监控区域设置了四个标签,以方便用户使用。这四个选项卡具有相同的功能。
断点设置和一些基本的调试技巧。断点是指在调试过程中,只要系统到达断点,系统就会自动停止(编译后的代码会运行,除非使用buildexcute命令。严格从这个意义上讲,这不被认为是调试命令),并且是通常与go 和step over 命令结合使用。
如何设置断点:在你的程序代码中,到你想要设置断点的行,按F9,该行代码的左端会出现一个红点——。这是一个VC++ 断点。为了方便用户以后调试过程中观察手表的内容,程序每次运行都会停在这里。删除断点的命令与设置断点的命令相同。如果设置了断点,再次按F9 将通过删除最左侧的红点来删除断点。您可能不需要断点,但现在,如果您在设置断点的位置按Ctrl+F9,您会注意到原始实心点现在已打开。 Circle —— 断点暂时禁用。要恢复断点功能,请按Ctrl+F9。当您的程序很长并且需要很多断点时,此功能特别有用。
条件断点技术——实际上是在一些分支语句内设置断点,这非常实用,特别是当程序的特定分支部分出现问题时。关于在哪里设置断点。我想说这个每个人情况不一样,我也不想多说,但是基本原则就是不要连续设置断点。如果需要连续观察,则必须使用“Step Over”或“Step In”命令。
现在,调试命令基本上是:现在我想谈谈我个人在调试过程中的想法和经历。
1.动态调试不是万能的。虽然动态调试几乎可以解决任何非算法问题,但毫无疑问动态调试需要花费大量的时间并且混乱程序员的思维。事实上,大量错误通常是由不正确的击键(“手部错误”)引起的。这类错误用动态调试很难发现,所以对于每个程序,在开始调试之前,必须重新整理一下思路,仔细阅读程序,用所谓的“静态错误检查”方法首先检查一下。一些明显的低级错误应该首先解决,也可能决定调试的重点。通过这样做,您可以显着减少调试时间,同时更容易发现思维中的错误。
2、调试时需要顺着程序的思路思考。坦率地说,您应该关注正在调试的语句段和正在更改的变量。
3、模块化可以有效减少调试时间。事实上,模块化不仅有效减少了开发时间,还有效减少了调试时间。首先,模块化使得使用step over命令变得更加容易,并减少了断点设置的数量。其次,程序错误经常发生在几个关键点。使用模块化设计思想后,您可以专注于那些关键点,避免不必要的一步调试。当然如果是面向对象就更好了。
4、多使用断点,执行光标命令,减少使用耗时的单步调试。
5、调试时不要破坏程序原有的结构。很多人喜欢在调试时打印一些中间变量的值。我们认为这更直观。当然,这也是一个非常重要的方法,尤其是涉及到迭代递归或者嵌套循环的时候。但是,我们不建议在非递归程序中使用此方法。这种方法最大的问题就是破坏了程序原有的结构和逻辑,除非你在最初的程序设计时就想到了这一点。当程序很长或者想法很复杂时尤其如此。否则,为什么每个编译的编程语言都会提供一个解释模式的编程语言?
6.遇到bug时不要急于更改程序。换句话说,不要随意应用补丁。其原则与第五条相同。在决定是否修复之前应该仔细分析。换句话说,冷静下来。特别是在删除程序段时,我们建议您首先注释掉您认为不需要的程序段。调试成功后删除也不迟。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。