两种“动态调试程序”的方法.doc

两种“动态调试程序”的方法.doc

ID:57706809

大小:13.50 KB

页数:2页

时间:2020-09-01

两种“动态调试程序”的方法.doc_第1页
两种“动态调试程序”的方法.doc_第2页
资源描述:

《两种“动态调试程序”的方法.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再一个就是运算符优先级的问题:小括号为最高优先级,应该先计算,计算方向为从左向右,单目运算符优先级次之,计算方向为从右向左

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。