CFree5程序调试方法

上传人:re****.1 文档编号:567711500 上传时间:2024-07-22 格式:PDF 页数:6 大小:851.73KB
返回 下载 相关 举报
CFree5程序调试方法_第1页
第1页 / 共6页
CFree5程序调试方法_第2页
第2页 / 共6页
CFree5程序调试方法_第3页
第3页 / 共6页
CFree5程序调试方法_第4页
第4页 / 共6页
CFree5程序调试方法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《CFree5程序调试方法》由会员分享,可在线阅读,更多相关《CFree5程序调试方法(6页珍藏版)》请在金锄头文库上搜索。

1、-C Free 5.0 程序的单步调试程序的单步调试创立一份新的代码文件可直接点击“文件下的白色图标, 或点击“文件选择“新建,或按快捷键“Ctrl + NC Free 5.0 默认情况下新建的代码文件为.cpp 格式,可在“工具、“环境选项、“新建文件类型中更改,C 语言标准格式为.c 格式基于实例的 C 程序调试介绍一、查看变量的容* include int main(intargc, char* argv)int i;int sum;sum=0;for(i=1;i=10;i+)sum=sum+i;printf(sum=%d,sum);return 0;第一步,翻开 C Free 5.0,

2、输入上面的代码。第二步,把光标移到“sum=0;这一行,按 F10它的作用是设一个断点, 程序运行到这里时,会停下来。 也就是说, 接下来, 程序必须通过按F7 键单步运行了。第三步:按 F9(开场调试)我们发现有一箭头停留在这句语句上,它指示程序停留的位置,而箭头所在的语句“sum=0;还没有执行。事实上,我们可以通过看一下存变量sum 的容来验证。方法是这样的:翻开“调试下的“监视,或者按快捷键“Alt + 3。在“监视的空白处点击鼠标右键,选择“添加监视。.z.-输入需要监视的变量名,这里输入为sum这时我们可以在监视窗口中看到sum 的容不为 0,而是一个随机的值。第四步,我们按一下

3、F7进入,我们发现 sum 的容变为 0 了。这说明“sum=0;这句语句被执行了。我们还可以用同样的方法看一下i 的容。只需要鼠标点第六步,一步一步地按 F7,我们可以发现在单步执行for 循环语句的时候 i 和 sum 的容在不断变化。当退出循环时,我们发现 i 的容为 11因为变量 i 的容为 11,i=10 这个条件不满足,所以程序退出循环。附带提一下,当程序已经执行了“sum=0;这一句语句后,如果我们直接把光标移到“printf(sum=%d,sum);,然后按Ctrl+ F8,我们可以直接把上面的for 循环都执行了,而不必一步一步地按 F7。在实践中,为了查找程序的逻辑错误,我

4、们往往要单步运行该程序好几遍。如果已经通过单步调试验证*一段语句如一个 for 循环语句或者几个用户定义的函数正确了,我们就可以用Ctrl+ F8 跳过这段语句,直接运行到还未测试的语句。二、二、F7F7进入和进入和 F8F8跳过的区别跳过的区别* include int add(intm,int n)int s;s=m+n;return s;int main(intargc, char* argv)int i=1;int j=2;.z.-int sum;sum=add(i,j);printf(sum=%d,sum);return 0;第一步, 把光标移到 “sum=add(i,j);, 按

5、F10 设置断点后按 F9 开场调试, 此时 “sum=add(i,j);这句语句还没有执行。接下来,如果按 F7,则程序单步执行到 int add(intm,int n)的函数体,此时箭头停留的位置如下列图所示。如果按不按 F7 而按 F8,则把 int add(intm,int n)的语句全部执行了(也就是说程序不会单步运行到 add 函数的里面)此时箭头停留的位置如下列图所示。也就是说,碰到函数, F7 会单步执行函数体的每一句语句,而F8 则把函数当作一句普通的C 语言语句来执行。在调试程序的时候,我们可以这样做:如果我们已经通过测试发现*一个函数已经正确,则我们不必单步执行函数体的每

6、一句语句;否则,我们单步执行函数体的每一句语句,监视相关的变量的容,通过测试用例检查一下问题出在那里。三、关于一重指针三、关于一重指针我们知道,一个指针是一个变量的地址, 是一个常量。存放一个变量的地址的变量是指针变量。例如:“int a=1;int m; int *p;p=&a;说明 p 是一个指针变量,它的容为整型变量a的地址。*p 就是 p 所指向的变量 a。指针变量p 指向整型变量 a 的实质是 p 存放的是 a 的地址。注意:(1)指针和指针变量是两个不同的概念。(2)在 int *p;这里*表示 p 是一个指针变量; m=*p;这里*和 p 结合起来,作为一个整体*p,表示p 所指

7、向的变量。也就是说,这两个*的作用是不一样的。下面我们通过例子来说明这个问题。*include *include int main(intargc, char* argv)int i=1;int *p=NULL;int temp;p=&i;temp=*p;printf(temp=%d,i=%d,temp,i);return 0;为了程序的可靠性,往往要对指针变量赋初值NULL。第一步,将光标移动到 p=&i;按 F10 设置断点后按 F9 开场调试在“监视窗口中添加 i,p,*p,temp。.z.-第二步,将光标移到“printf(temp=%d,i=%d,temp,i);,按 Ctrl +

8、F8 。这时我们可以在“监视窗口中发现 i 的容为 1,*p 的容为 1,p 的容为 0*28ff44(注意每次调试时,地址可能不一样, 因为编译器为变量分配的地址会变的), temp 的容为 1。 *p 的容和 temp 的容是一样的。说明:这里 0*28ff44 是 i 的地址,另外,系统每次分配给程序的数据段往往不一样,我们在调试程序时,在“监视窗口中观察到的指针变量p 的容往往不是 0*28ff44,这是正常的。下面两个小节涉及到具体地址的例子也一样。四、指针作为函数的参数四、指针作为函数的参数*include *include void swap(int *p,int *q)int

9、temp;temp=*p;*p=*q;*q=temp;int main(intargc, char* argv).z.-int i=1;int j=2;int *address_i=NULL;int *address_j=NULL;address_i=&i;address_j=&j;swap(&i,&j);printf(i=%d,j=%d,i,j);printf(%d %d,*address_i,*address_j);return 0;函数 swap 的作用是交换两个存变量的值。第一步,将光标移动到address_i=&i;按 F10 设置断点后按 F9 开场调试在“监视窗口中添加 i,j,

10、address_i,p,q,*p,*q,temp。第二步,将光标移到 swap(&i,&j);按 Ctrl+F8。这时我们可以发现 address_i 的容为 0*28ff44对应&i,address_j 的容为 0*28ff40对应&j。.z.-第三步,按 F7,进入到函数 swap 的函数体,这时我们发现“监视窗口中 p 的容为 0*28ff44对应&i,q 的容为 0*28ff40对应&j。此时,“监视窗口中 address_i,address_j,i,j 都出现了“未知这样的信息,这是因为当前程序执行到了函数swap 的函数体,而“监视窗口中显示的容为当前正在执行的函数里的变量和表达式

11、。为此,我们通过观察*p 的容来观察 i 的容,通过观察*q 的容来观察 j的容。(这里涉及到了形参和实参的对应关系,p 对应&i,q 对应&j )第四步按 F7 执行 temp=*p;此时,temp 的容 1,如下列图所示。这里指针变量 p 放了整型变量 i的地址, 所以 p 指向 i,所谓的指向其实就是一个变量放了另一个变量的地址。第五步,按 F7 执行*p=*q;第六步,按 F7 执行*q=temp;这样变量 i 和变量 j 的容交换了。说明:由于读者执行程序时,得到的相关变量的地址值往往和这个例子中的地址值不一样,建议读者也按照本文的方法,画一画上面的图,能加深对指针的理解。不管地址怎么变, p 的容和 address_i 的容一样,q的容和 address_j 的容一样。.z.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号