欢迎来到天天文库
浏览记录
ID:57706809
大小:13.50 KB
页数:2页
时间:2020-09-01
《两种“动态调试程序”的方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、两种“动态调试程序”的方法——写给编程的新人们 调试程序是一件苦差事,即使是经验老到的程序员,也会有焦头烂额的时候。对于大段大段的代码,找了几个钟头还没发现其中的错误,难免头昏眼花,这时我们就想到:既然眼睛没看出代码中的错误,那么,我们让错误在运行的时候暴露出来,然后顺藤摸瓜,找到代码中的错误处。这就是所谓的“动态调试”。相对的,不让程序运行,而是一行一行的看代码,找错误,可称为“静态调试”。 方法一:使用断言。 C和C++有一个很好用的东西:assert(即:断言),就是说程序员认为asser
2、t里面的东西必然成立。如果断言失败(程序员认为它必然成立,但事实上不成立),说明程序某个地方出了问题,程序将终止。 例如,我们希望求一个整数x的算术平方根的整数部分r,如果计算正确,则必然有r*r<=x,(r+1)*(r+1)>x,所以我们可以这样写:#include /*在C++中,用#include*/int SquareRoot( int x ){ int r; /* 计算r */ assert( r*r <= x ); ass
3、ert( (r+1)*(r+1) > x ); return r;} 如此一来,一旦计算发生错误,程序就会立即终止,并提醒程序员有错误发生,在哪一行。在写代码的时候插入一些assert,可以有效的帮助程序员找出错误。同时,也可以在错误时停止程序,避免错误的扩大。 方法二:在IDE中使用动态调试。 很多IDE(集成编辑环境)都带有动态调试功能,诸如:单步运行、变量监视等,有的甚至给出了寄存器、反汇编、函数调用堆栈。但使用最频繁的应该是前两种。 单步运行和变量监视通常结合使用。以VC20
4、03中文版为例,当程序编译以后,每按一次F10键,可执行一条语句,然后停下来。这时调试者可以看看哪些变量发生了改变,这种改变是否在自己预料之中。 监视变量的方法是,在单步运行的时候选择菜单中的“调试”->“窗口”->“监视”(VC的其他版本也比较类似),打开监视的窗口,在窗口左边输入需要监视的表达式(比如:要监视变量a,就输入“a”;要监视a+3的值,就输入a+3)。 除了F10以外,还有几个快捷键。如果正在被运行的行是一个函数,则按F11,可运行到函数的内部。按Shift+F11可以将所在的函数运行
5、完,直到所在的函数返回才停下。按F5可一直运行直到程序结束。当然,遇到“断点”的话,程序也会停下。在编辑或调试的时候,按F9可以把所在的行设置/取消断点。 这样一行一行的执行,可以把诸如循环、if语句的处理都看得请清楚楚。甚至,通过监视“函数调用堆栈”,对学习递归也有一定的好处。 可能我说得不是很清楚,但初学编程的话一定要学调试。不然可能程序编译连接都通过,但运行起来错误一堆一堆的,用不了多久就没信心继续学下去了。#include main(){int a=2,b; b=((++a)
6、*(++a)*(++a)); printf("%d",a); printf("%d",b); }这个分析很正确的 我也上机调试过 结果是a=5 b=80其实++,--运算符都属于单目运算符它们都有两种方式:一种是前缀方式,一种是后缀方式。前缀运算表达式的值为原来变量值加1,后缀表达式的值为原变量值也就是说前缀形式是先增1,后被引用;后缀形式是先被引用,后增1再一个就是运算符优先级的问题:小括号为最高优先级,应该先计算,计算方向为从左向右,单目运算符优先级次之,计算方向为从右向左
此文档下载收益归作者所有