CFree5程序调试方法

上传人:i**** 文档编号:72008634 上传时间:2022-04-07 格式:DOC 页数:6 大小:334KB
收藏 版权申诉 举报 下载
CFree5程序调试方法_第1页
第1页 / 共6页
CFree5程序调试方法_第2页
第2页 / 共6页
CFree5程序调试方法_第3页
第3页 / 共6页
资源描述:

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

1、页眉内容C Free 5.0程序的单步调试创建一份新的代码文件可直接点击“文件”下的白色图标,或点击“文件”选择“新建”,或按快捷键“Ctrl+ N”(C Free 5.0 默认情况下新建的代码文件为.cpp格式,可在“工具”、“环境选项”、 “新建文件类型”中更改,C 语言标准格式为.c格式)基于实例的C 程序调试介绍一、查看变量的内容# include int main(int argc, 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”。在“监视”的空白处点击鼠标右键,选择“添加监视”。页眉内容输入需要监视的变量名,这里输入为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 循环都执行了,而不必一步一步地按 F

4、7。在实践中,为了查找程序的逻辑错误,我们往往要单步运行该程序好几遍。 如果已经通过单步调试验证某一段语句(如一个for循环语句或者几个用户定义的函数)正确了,我们就可以用Ctrl+ F8跳过这段语句,直接运行到还未测试的语句。二、 F7(进入)和F8(跳过)的区别# include int add(int m,int n)int s;s=m+n;return s;int main(int argc, char* argv)int i=1;int j=2;页眉内容int sum;sum=add(i,j);printf(sum=%d,sum);return 0;第一步,把光标移到“sum=add

5、(i,j);”,按 F10 设置断点后按F9 开始调试,此时“sum=add(i,j);”这句语句还没有执行。接下来,如果按F7,则程序单步执行到int add(int m,int n)的函数体,此时箭头停留的位置如下图所示。如果按不按F7 而按 F8,则把 int add(int m,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 结合起来, 作

7、为一个整体 *p,表示 p 所指向的变量。也就是说,这两个下面我们通过例子来说明这个问题。* 的作用是不一样的。#include #include int main(int argc, 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。页眉内容第二步,将光标移到“printf(temp=%d,i=%d,t

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

9、nt *q)int temp;temp=*p;*p=*q;*q=temp;页眉内容int main(int argc, char* argv)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 开始调试在“监

10、视”窗口中添加i ,j ,address_i, p, q,*p,*q,temp。第二步,将光标移到swap(&i,&j);按 Ctrl+F8。这时我们可以发现address_i的内容为 0x28ff44 (对应 &i ), address_j的内容为 0x28ff40 (对应 &j )。页眉内容第三步,按F7,进入到函数swap 的函数体,这时我们发现“监视”窗口中p 的内容为 0x28ff44 (对应 &i),q 的内容为0x28ff40 (对应 &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 的内容一样。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!