掌控C builder的除错艺术(2).2

2008-02-23 05:34:11来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

掌控c builder的除错艺术

第二篇-近距离观察(2)

使用evaluate/modify(求值/修改)

最后一种显示变量或代码块的值的途径是evaluate/modify(求值/修改)窗口。这个窗口能够象打开巡视器相同打开,在您要evaluate/modify(求值/修改)的代码行上右击选择"debug|evaluate/modify"就会弹出evaluate/modify(求值/修改)窗口。本窗口用来对表达式/变量求值并/或修改。watches和/或inspectors也能够实现同样的功能。但假如您想要修改的话,这里恐怕是最好的地方。

“察看变量已听够了,现在我想去看看我的代码到底怎么了,而不是干坐在这里。”我听见您如是说。下一节我们将在函数体内外单步跟踪直至断点(还记得前面的东西么?)。

在代码块内外进行stepping(单步执行/跟踪)

在此有一件事要牢记,前面讲的绝大多数察看变量的办法是动态更新的。所以当您跟踪至新的一行的时候,变量的值会被自动重新求值,并且显示在窗口中的值被更新成新的当前值。

okay,当您点击您所配置的断点时,您会看到您所需检查的变量。下一步就是在代码中单步执行并且近距离观察实际发生的和您所猜测的是否一致(通过使用watches/inspectors并跟随代码的执行路径前进)。

stepping的类型

这部分解释起来似乎很简单。但下面的大部分都是来讨论您用这些能做什么(似乎在别处没有听到过?)。您能够告诉调试器五种"stepping types"(单步执行类型)。我们会按run菜单上的顺序来解释。我同时会给出他们的快捷键。在调试时使用快捷键的次数会多过使用菜单选项的(比较按10次键盘和选10次菜单,我想您知道什么更好)。

第一种是"step over"(在函数体外单步执行)或f8。这会让调试器执行代码至当前函数的下一行可见的代码停下,或当运行至当前函数的最后一行时,调试器返回至调用函数停下。在您知道所调用的函数没有问题时,stepping over功能很方便。

下一个是"trace into"(跟踪至函数体内)或f7。假如运行的当前行是调用一个函数,调试器将把我们带到调用的函数的第一行(即使是隐含调用函数,例如一个write属性)。否则执行至当前行的下一行。当您想看看这个函数到底做些什么时,这个功能很方便。

接下来是"trace to next source line"(跟踪至下一个源代码行)或shift-f7。调试器会运行至下一个具备调试信息的代码行。这和"trace into"的区别,让我们举例来说明吧。当我们调用一个没有源代码的windows api函数并且这个api函数调用了我们代码中的一个回调函数。"trace to next source line"将在回调函数的第一行停下来,而"trace into"会忽略这个回调函数并在当前程式的下一行停下来。

然后是"run to cursor"(运行至光标处)或f4。调试器将运行代码直至光标所在的行。这使得不需配置断点又能够跳过大片代码变得很方便(考虑只需停顿一次的情况)。

更有"run until return"(运行至返回)或shift-f8。调试器将运行代码直至当前函数返回调用他的函数。当您不想手工单步执行至函数结束(假如您陷入一个循环中的话,这个过程会变的十分冗长)时,这么做就会很方便的跳到函数的结尾处。

最后一个是"program reset"(程式重置)或ctrl-f2。调试器会中断已运行的程式并返回至调试器。除非迫不得已不要这么做,因为对象所使用的资源没有被释放!!!(在一个数据库应用程式中,这样做2-3次后,您将不得不关闭并重启ide,因为bde内部资源将耗尽。您已被警告啦)。当您不得不中止可执行程式时,这很有用。

最后(却在菜单很上面的位置)是"run"(运行)或f9。调试器将运行至程式结束,除非碰到您点击新的断点或发生异常。

stepping的注解

要牢记的是任何这些单步执行方式在调试器通过断点时,调试器会对断点求值,若断点需要就停下。假如出现异常,调试器也会停下。

正如您所见,在正确的地方配置断点,察看变量并在代码中单步跟踪,我们能够以很近的距离观察程式在做什么就好象他真的运行相同。这些功能在追查最困难的bugs---逻辑bug时,相当方便。

其他提示

假如您真的很勇猛并有汇编语言的经验,您能够点击"view|debug windows|cpu"打开一个"cpu view"cpu窗口。这里不但显示了当前可执行程式的指令的汇编指令,更有象cpu标志、寄存器的内容和不断更新的内存印象

使用call stack ("view|debug windows|call stack")能够很方便的找出发生异常之前或碰到断点之前的函数调用历史。记住,这里只是显示什么函数被什么函数调用过,并非真正的调用过程的历史记录。因此,这个窗口可能先会让您感到困惑。但是只要开着他来stepping through单步跟踪代码至函数体内,好好观察一下您就会完全明白了。

c builder4、5中,watch, local variable, 和 call stack窗口能够驻留在code主窗口中,使用起来更加方便。c builder5中还能够设定调试布局,以便在调试时使用(针对您在设计时使用的设计布局来讲的)。

使用任何我所公开的任何技术再加上一点点耐心和一双火眼金睛,您应该能够解决99%的bug。若您想找到bug,耐心是必要的。花点时间,深呼吸一下,不要让挫折吓倒。假如有必要,走出去5分钟干点别的,您会惊奇的发现自己有了新的视野或发现开始时漏掉了什么步骤。

假如您有其他的技巧和提示觉得应该加入此文,请尽管来信告诉我们,我们会在以后的版本中加入您的意见。

好了,我希望这篇文章在某种程度上有助于耐心的读者们。假如正是这样,我会十分高兴自己干了件不错的工作。也许您任何的bugs都已微不足道了。

原著:bill king

翻译:史平洋 - cker



版权说明:

国内的网站上,有许多关于c++builder的内容,但多以软件、组件为主。论坛里也大都不能令人满意,很空虚的感觉。书籍又都昂贵,内容却有抢钱之嫌。对银子不足的初学者、自学者关爱不够,因而想尽自己的绵薄之力。

文中的任何资料都是从外国网站上收集而来。因为e文不方便,所以翻成中文。因为english和电脑都不是很好,文中的错误在所难免。若大家觉得有用的话,我计划不断搜集翻译一些有用的东西。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 掌控C builder的除错艺术(1)

下一篇: 关于Unicode和字符集的最基础的知识

热门词条
热门标签