把握C++ builder的除错艺术(2).2
当前位置:以往代写 > C/C++ 教程 >把握C++ builder的除错艺术(2).2
2019-06-13

把握C++ builder的除错艺术(2).2

把握C++ builder的除错艺术(2).2

第二篇-近间隔调查(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单步跟踪代码至函数体内,好好调查一下您就会完全大白了。

#p#分页标题#e#

c++builder4、5中,watch, local variable, 和 call stack窗口可以驻留在code主窗口中,利用起来越发利便。c++builder5中还可以设定调试机关,以便在调试时利用(针对您在设计时利用的设计机关来讲的)。

利用所有我所发布的所有技能再加上一点点耐性和一双火眼金睛,您应该可以办理99%的bug。若您想找到bug,耐性是须要的。花点时间,深呼吸一下,不要让荆棘吓倒。假如有须要,走出去5分钟干点此外,您会诧异的发明本身有了新的视野可能发明开始时遗漏了什么步调。

假如您有其他的能力和提示以为应该插手此文,请尽量来信汇报我们,我们会在今后的版本中插手您的意见。

好了,我但愿这篇文章在某种水平上有助于耐性的读者们。假如正是这样,我会十分兴奋本身干了件不错的事情。也许您所有的bugs都已微不敷道了。

原著:bill king

翻译:史平洋 - cker

    关键字:

在线提交作业