现在的位置: 首页 > 综合 > 正文

[转]两种“动态调试程序”的方法——写给编程的新人

2012年11月01日 ⁄ 综合 ⁄ 共 1318字 ⁄ 字号 评论关闭

[转]两种“动态调试程序”的方法——写给编程的新人

呵呵 看的写的不错就转过来了,都是些基本的东东

from:http://www.programfan.com/club/showpost.asp?id=147534&t=o

调试程序是一件苦差事,即使是经验老到的程序员,也会有焦头烂额的时候。对于大段大段的代码,找了几个钟头还没发现其中的错误,难免头昏眼花,这时我们就想到:既然眼睛没看出代码中的错误,那么,我们让错误在运行的时候暴露出来,然后顺藤摸瓜,找到代码中的错误处。这就是所谓的“动态调试”。相对的,不让程序运行,而是一行一行的看代码,找错误,可称为“静态调试”。
    方法一:使用断言。
     C和C++有一个很好用的东西:assert(即:断言),就是说程序员认为assert里面的东西必然成立。如果断言失败(程序员认为它必然成立,但事实上不成立),说明程序某个地方出了问题,程序将终止。
     例如,我们希望求一个整数x的算术平方根的整数部分r,如果计算正确,则必然有r*r<=x,(r+1)*(r+1)>x,所以我们可以这样写:


#include<assert.h> /*在C++中,用#include<cassert>*/
int SquareRoot( int x )
{
     int r;
     /*
     计算r
     */
     assert( r*r <= x );
     assert( (r+1)*(r+1) > x );
     return r;
}

     如此一来,一旦计算发生错误,程序就会立即终止,并提醒程序员有错误发生,在哪一行。在写代码的时候插入一些assert,可以有效的帮助程序员找出错误。同时,也可以在错误时停止程序,避免错误的扩大。

    方法二:在IDE中使用动态调试。
     很多IDE(集成编辑环境)都带有动态调试功能,诸如:单步运行、变量监视等,有的甚至给出了寄存器、反汇编、函数调用堆栈。但使用最频繁的应该是前两种。
     单步运行和变量监视通常结合使用。以VC2003中文版为例,当程序编译以后,每按一次F10键,可执行一条语句,然后停下来。这时调试者可以看看哪些变量发生了改变,这种改变是否在自己预料之中。
     监视变量的方法是,在单步运行的时候选择菜单中的“调试”->“窗口”->“监视”(VC的其他版本也比较类似),打开监视的窗口,在窗口左边输入需要监视的表达式(比如:要监视变量a,就输入“a”;要监视a+3的值,就输入a+3)。
     除了F10以外,还有几个快捷键。如果正在被运行的行是一个函数,则按F11,可运行到函数的内部。按Shift+F11可以将所在的函数运行完,直到所在的函数返回才停下。按F5可一直运行直到程序结束。当然,遇到“断点”的话,程序也会停下。在编辑或调试的时候,按F9可以把所在的行设置/取消断点。
     这样一行一行的执行,可以把诸如循环、if语句的处理都看得请清楚楚。甚至,通过监视“函数调用堆栈”,对学习递归也有一定的好处。

     可能我说得不是很清楚,但初学编程的话一定要学调试。不然可能程序编译连接都通过,但运行起来错误一堆一堆的,用不了多久就没信心继续学下去了。

抱歉!评论已关闭.