掌握C++ builder的除错艺术(2).2[VC/C++编程]
本文“掌握C++ builder的除错艺术(2).2[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
第二篇-近距离察看(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的除错艺术(2).2[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |