C编程的调试技巧PPT学习教案_第1页
C编程的调试技巧PPT学习教案_第2页
C编程的调试技巧PPT学习教案_第3页
C编程的调试技巧PPT学习教案_第4页
C编程的调试技巧PPT学习教案_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1C编程的调试技巧编程的调试技巧第2页/共64页第1页/共64页保存、全部保存打开最近的工程第3页/共64页第2页/共64页第4页/共64页第3页/共64页第5页/共64页第4页/共64页给工程中添加文件第6页/共64页第5页/共64页查找文件在指定目录下的某类型文件中搜索所有包含某字符串的文件第7页/共64页第6页/共64页Debug:带有调试信息,文件大。Release:没有调试信息,不能调试,文件小第8页/共64页第7页/共64页切换Debug模式和Release模式第9页/共64页第8页/共64页比较文件大小第10页/共64页第9页/共64页编译(编译(ctrl+F7):编译源文

2、件到目标文件):编译源文件到目标文件构建(构建(F7):链接目标文件和库函数为可执行文件,如无目标文件则先生成):链接目标文件和库函数为可执行文件,如无目标文件则先生成清洁:删掉清洁:删掉debug或者或者release版本的所有中间文件和可执行文件版本的所有中间文件和可执行文件调试调试单步执行(单步执行(F10):单步执行,遇到函数调用时把其当作一条语句执行):单步执行,遇到函数调用时把其当作一条语句执行深入函数的单步执行(深入函数的单步执行(F11):单步执行,遇到函数调用是深入到其内部):单步执行,遇到函数调用是深入到其内部执行到光标处(执行到光标处(ctrl+F10):一次执行完光标前

3、的所有语句,并停到光标处):一次执行完光标前的所有语句,并停到光标处跳出(跳出(shift+F11):执行完当前函数的所有剩余代码,并从函数跳出):执行完当前函数的所有剩余代码,并从函数跳出重新开始调试(重新开始调试(ctrl+shift+F5):重新开始调试过程):重新开始调试过程结束调试(结束调试(shift+F5):执行完程序的剩余部分,结束调试):执行完程序的剩余部分,结束调试设置设置/取消断点(取消断点(F9):在某一行设置和取消断点):在某一行设置和取消断点第11页/共64页第10页/共64页第12页/共64页第11页/共64页当前执行的语句当前执行的语句堆栈的内容:函数调用关系堆

4、栈的内容:函数调用关系从这里可以从这里可以查看内存数据查看内存数据程序执行过程中的一程序执行过程中的一些变量会显示在这里些变量会显示在这里著名的著名的watch窗口:看变量窗口:看变量表达式、地址等各种信息表达式、地址等各种信息寄存器当前值寄存器当前值第13页/共64页第12页/共64页第14页/共64页第13页/共64页n网络搜索引擎第15页/共64页第14页/共64页第16页/共64页第15页/共64页第17页/共64页第16页/共64页#include#includevoid main()coutsetw(10)十进制十进制setw(10)二进制二进制setw(10)八进制八进制“set

5、w(10)十六进制十六进制endl;for(int i=1;i=156;i+)coutsetw(10)deci=1;j/=2)if(d/j=1)cout1;if(d/j=0)cout0;d=d%j;coutsetw(10)octisetw(10)hexiendl;一个编程风格非常糟糕的例子:一个编程风格非常糟糕的例子:第18页/共64页第17页/共64页/*FILE COMMENT* * System Name : for eduction (NO TRANSFERRING) * File Name : e05b.c * Contents : embedded C language entra

6、nce course * : exercise 5B: program using pointer * : 乮乮pass one-dimensional array to function) * Model : for OAKS8-LCD Board * CPU : R8C/Tiny series * Compiler : NC30WA(V.5.30 Release 1) * OS : not be used * Programmer : RENESAS Semiconductor Training Center * Note : for OAKS8-R5F21114FP(R8C/11 gro

7、up,20MHz) * * COPYRIGHT(C) 2004 RENESAS TECHNOLOGY CORPORATION * AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED * * History : *FILE COMMENT END*/* include file */#include defs.h/* define common symbol */#include oaks8lib.h/* for function to deal with OAKS8-LCDBoard peripheral*/* define functi

8、on prototype */int main(void);static void get_string(unsigned char *message, unsigned char *buff);/* input string*/static int get_strlength(unsigned char *str);/* get string length */static void print_dec(unsigned char *message, int dec);/* display decimal number in LCD*/*FUNC COMMENT* * ID : 1.0 *

9、function name : main * function : call function to get string length, display result * parameter : none * return : result 0:normal end * function used : get_strlength * notice : none * History : *FUNC COMMENT END*/int main(void)unsigned char buff10+1;/* define variable to save string input from key

10、matrix*/int count;/* define variable for save number of character */while(1)/* input string from key matrix */get_string(Str=, buff);/* call function to get string length */* pass address of array saving string, get string length */count = get_strlength(buff);/* display string length in LCD */print_

11、dec(Len=, count);return 0;/*FUNC COMMENT* * ID : 1.1 * function name : get_string * function : input string from key matrix * parameter : message:pointer to input waiting message * : buff :pointer to space saving string input * return : none * function used : none * notice : none * History : *FUNC C

12、OMMENT END*/static void get_string(unsigned char *message, unsigned char *buff)/* define function to input string */LCD_puts(message);/* display message*/SW_gets(buff); /* input string from key matrix*/LCD_puts(buff);/* display string input */LCD_putchar(n);/* return */*FUNC COMMENT* * ID : 1.2 * fu

13、nction name : get_strlength * function : refer string using pointer passed as argument, return length * parameter : str:address of string to count length * return : length * function used : none * notice : none * History : *FUNC COMMENT END*/static int get_strlength(unsigned char *str)/* define func

14、tion to get string length*/int len = 0;/* define and initialize variable for string length*/* refer every character in one-dimensional array buff pointed by */* pointer str, count up until detect (0) at end of string */while(0 != *str+)len+;/* count number of character */return len; /* return length

15、*/*FUNC COMMENT* * ID : 1.3 * function name : print_dec * function : display decimal number in LCD * parameter : message:pointer to input waiting message * : dec :decimal number to be displayed * return : none * function used : none * notice : none * History : *FUNC COMMENT END*/static void print_de

16、c(unsigned char *message, int dec)/* define function to display decimal number in LCD */LCD_puts(message);/* display message*/LCD_putdec(dec);/*display decimal number in LCD*/LCD_putchar(n);/* return */* end of file*/一个编程风格良好的例子:一个编程风格良好的例子:第19页/共64页第18页/共64页第20页/共64页第19页/共64页#include void main()flo

17、at num1,num2,outcome;char op,a;do coutput two numbers:num1num2endl;coutenter its operater:opendl;if(num2!=0)switch(op)case *:outcome=num1*num2;break;case /:outcome=num1/num2;break;case +:outcome=num1+num2;break;case -:outcome=num1-num2;break;default:coutthey can not be workn;coutthe outcome isoutcom

18、eendl;else couto can not as a dividern;coutaendl;while(a=y);两个数的算术运算两个数的算术运算第21页/共64页第20页/共64页/如果输入字符如果输入字符a,则显示,则显示1,否则程序结束,否则程序结束#include int f()char c;cout请输入请输入a或其他字符或其他字符c;if(c=a)return 1;else;int main()coutf()endl;return 0;根据输入给出输出根据输入给出输出第22页/共64页第21页/共64页第23页/共64页第22页/共64页#includeint main()d

19、ouble a, b, c, d;coutabc;if(a=b&b=c)coutdengbian sanjiaoxingn;d = 1.732 * a * a/4; coutdendl;if(c*c=a*a+b*b|a*a=b*b+c*c|b*b=a*a+c*c)coutzhijiao sanjiaoxingn;d = (a*b/2|a*c/2|b*c/2);coutdendl;return 0;判断三角形的形状判断三角形的形状第24页/共64页第23页/共64页第25页/共64页第24页/共64页#include void main()double integer1,integer2,e,f

20、,g,h;char op,a;cina while(a=y)coutop;coutinteger1;coutinteger2;switch(op).e=integer1+integer2;f=integer1-integer2;g=integer1*integer2;h=integer1/integer2;case +:coute;break;case -:coutf;break;case *:coutg;break;case /:couth;break;coutDo you want to continue(Y/N or y/n)?;两个数的算术运算两个数的算术运算第26页/共64页第25页

21、/共64页#include void main()double integer1,integer2,e,f,g,h;char op,a;cina/分号、分号、 while(a=y)/等号等号coutop;coutinteger1;coutinteger2;switch(op)./点点e=integer1+integer2;/这段代码执行不到这段代码执行不到f=integer1-integer2;g=integer1*integer2;h=integer1/integer2;case +:coute;break;case -:coutf;break;case *:coutg;break;case

22、 /:couth;break;cout“Do you want to continue(Y/N or y/n)?”; /标记控制重标记控制重复复两个数的算术运算两个数的算术运算第27页/共64页第26页/共64页第28页/共64页第27页/共64页#include int main()char type = s;while(type != !)cout请输入一个字符:请输入一个字符:type;if (type = 65 & type = 90)cout输入的字符为大写字母输入的字符为大写字母!= 97 & type = 122)cout输入的字符为小写字母输入的字符为小写字母!= 48 & t

23、ype = 57)cout输入的字符为数字输入的字符为数字!endl;elsecout输入的字符为其他字符输入的字符为其他字符!endl;cout! to end !endl;return 0;判断一个字符是什么类别判断一个字符是什么类别另一个通过单步执行另一个通过单步执行调试的例子调试的例子第29页/共64页第28页/共64页#include int main()char type = s;while(type != !)cout请输入一个字符:请输入一个字符:type;if (type = 65 & type = 90)cout输入的字符为大写字母输入的字符为大写字母!= 97 & typ

24、e = 122)cout输入的字符为小写字母输入的字符为小写字母!= 48 & type = 57)cout输入的字符为数字输入的字符为数字!endl;elsecout输入的字符为其他字符输入的字符为其他字符!endl;cout! to end !endl;return 0;判断一个字符是什么类别判断一个字符是什么类别通过单步执行可以搞通过单步执行可以搞清程序的执行线路,清程序的执行线路,以发现错误点以发现错误点第30页/共64页第29页/共64页#includeint main()int m;cout请输入一个正整数请输入一个正整数:m;for(int i=1;i=m-1;i+)m=m*i;

25、cout阶乘为阶乘为:mendl;return 0;求阶乘求阶乘第31页/共64页第30页/共64页#includeint main()int m;cout请输入一个正整数请输入一个正整数:m;for(int i=1;i=m-1;i+)m=m*i; /循环体内修改了循环条件循环体内修改了循环条件cout阶乘为阶乘为:mendl;return 0;求阶乘求阶乘通过单步执行可以监通过单步执行可以监视变量的变化,当变视变量的变化,当变量与预期不一致是,量与预期不一致是,即找到了错误点即找到了错误点第32页/共64页第31页/共64页#includeint main()int m;cout请输入一个正

26、整数请输入一个正整数:m;int n=m;for(int i=1;i=n-1;i+)m=m*i;cout阶乘为阶乘为:mendl;return 0;求阶乘求阶乘第33页/共64页第32页/共64页第34页/共64页第33页/共64页第35页/共64页第34页/共64页第36页/共64页第35页/共64页#include void main()for(int i=1;i=10;i+)for(int j=1;j=i;j+)cout*flush;coutendl;coutendl;for(int t=1;t=10;t+)for(int k=1;k=11-t;k+)cout*;coutendl;cou

27、tendl;for(int s=1;s=10;s+) for(int m=1;ms-1;m+)cout=11-s;n-)cout*;coutendl;coutendl;for(int z=1;z=10;z+)for(int p=9;p=10-z;p-)cout ;for(int q=1;q=z;q+)cout*;coutendl;coutendl;输出星号输出星号第37页/共64页第36页/共64页#include void main()for(int i=1;i=10;i+)for(int j=1;j=i;j+)cout*flush;coutendl;coutendl;for(int t=1

28、;t=10;t+)for(int k=1;k=11-t;k+)cout*;coutendl;coutendl;for(int s=1;s=10;s+) for(int m=1;ms-1;m+)cout=11-s;n-)cout*;coutendl;coutendl;for(int z=1;z=10;z+)for(int p=9;p=10-z;p-)cout ;for(int q=1;q=z;q+)cout*;coutendl;coutendl;输出星号输出星号分析:程序比较长,分析:程序比较长,输出怪异,一时难以输出怪异,一时难以发现出错地点,所以发现出错地点,所以采用化整为零、化繁采用化整为

29、零、化繁为简的分段调试法为简的分段调试法第38页/共64页第37页/共64页#include void main()for(int i=1;i=10;i+)for(int j=1;j=i;j+)cout*flush;coutendl;coutendl;for(int t=1;t=10;t+)for(int k=1;k=11-t;k+)cout*;coutendl;coutendl;for(int s=1;s=10;s+) for(int m=1;ms-1;m+)cout=11-s;n-)cout*;coutendl;coutendl;for(int z=1;z=10;z+)for(int p=

30、9;p=10-z;p-)cout ;for(int q=1;q=z;q+)cout*;coutendl;coutendl;输出星号输出星号使用到的调试方法使用到的调试方法:分段调试分段调试单步单步F10调试调试run to cursor强制输出(强制输出(flush)用用watch窗口观察窗口观察表达式的值表达式的值第39页/共64页第38页/共64页#include void main()for(int i=1;i=10;i+)for(int j=1;j=i;j+)cout*flush;coutendl;coutendl;for(int t=1;t=10;t+)for(int k=1;k=1

31、1-t;k+)cout*;coutendl;coutendl;for(int s=1;s=10;s+) for(int m=1;ms;m+)cout flush;for(int n=1;n12-s;n+)cout*flush;coutendl;coutendl;for(int z=1;z=z;p-)cout flush;for(int q=1;q=z;q+)cout*flush;coutendl;coutendl;调试后的程序调试后的程序,改正了循环中的逻,改正了循环中的逻辑问题,另外,本程辑问题,另外,本程序存在变量定义过多序存在变量定义过多的缺点的缺点第40页/共64页第39页/共64页#

32、include void main()for(int i=1;i=10;i+)for(int j=1;j=i;j+)cout*flush;coutendl;coutendl;for(int t=1;t=10;t+)for(int k=1;k=11-t;k+)cout*;coutendl;coutendl;for(int s=1;s=10;s+) for(int m=1;ms-1;m+)cout=11-s;n-)cout*;coutendl;coutendl;for(int z=1;z=10;z+)for(int p=9;p=10-z;p-)cout ;for(int q=1;q=z;q+)co

33、ut*;coutendl;coutendl;输出星号输出星号对错误程序的进一步分析:对错误程序的进一步分析:为什么会出现黑屏?错误为什么会出现黑屏?错误原因在哪里?可通过修改原因在哪里?可通过修改源代码,设置标志位来验证源代码,设置标志位来验证第41页/共64页第40页/共64页nwatch窗口:可观察变量或表达式的值,配合F10进行单步“精调”第42页/共64页第41页/共64页第43页/共64页第42页/共64页/例例 求阶乘求阶乘#includeint Factorial ( int ) ; void main () int k ; cout k ;cout k ! = Factoria

34、l(k) endl ; int Factorial ( int n ) if ( n = 0 )return 1 ; else return n * Factorial ( n - 1 ) ;分析程序执行流程分析程序执行流程求阶乘求阶乘第44页/共64页第43页/共64页第45页/共64页第44页/共64页/例例 求阶乘求阶乘#includeint Factorial ( int ) ; void main () int k ; cout k ;cout k ! = Factorial(k) endl ; int Factorial ( int n ) if ( n = 0 )return 1

35、 ; elseint m = n * Factorial ( n - 1 );return m;简化简化return语句语句求阶乘求阶乘第46页/共64页第45页/共64页/例例 求阶乘求阶乘#includeint Factorial ( int ) ; void main () int k ; cout k ;cout k ! = Factorial(k) endl ; int Factorial ( int n ) if ( n = 0 )return 1 ; elsecoutthe parameter of this call is: nendl;int m = n * Factoria

36、l ( n - 1 );coutlast call go back here: nendl;return m;增加调试输出信息增加调试输出信息求阶乘求阶乘第47页/共64页第46页/共64页第48页/共64页第47页/共64页第49页/共64页第48页/共64页/例例 求菲波那契数列的第五项求菲波那契数列的第五项#includeint Fibonacci ( int n ) if ( n = 2 ) return 1 ;else return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ;void main () cout Fibonacci(5) endl ;

37、 求菲波那契数列第五项求菲波那契数列第五项请大家注意观察堆栈的变化请大家注意观察堆栈的变化第50页/共64页第49页/共64页第51页/共64页第50页/共64页#include#include#includeint main()int m,i,k,n=0;bool prime=1;for(m=101;m=199;m+=2)k=int(sqrt(m);for(i=2;i=k;i+)if(m%i=0)prime=0;break;if(prime)coutsetw(5)m;n+;if(n%10=0)coutendl;coutendlthe total number is: nendl;return

38、 0;求求100-200间的素数间的素数第52页/共64页第51页/共64页#include#include#includeint main()int m,i,k,n=0;bool prime=1;for(m=101;m=199;m+=2)k=int(sqrt(m);for(i=2;i=k;i+)if(m%i=0)prime=0;break;if(prime)coutsetw(5)m;n+;if(n%10=0)coutendl;coutendlthe total number is: nendl;return 0;求求100-200间的素数间的素数用断点来代替用断点来代替run to cursor第53页/共64页第52页/共64页在光标处设置断点在光标处设置断点F9运行程序至断点处运行程序至断点处F5第54页/共64页第53页/共64页光标放到第光标放到第23行行设置条件断点设

温馨提示

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

最新文档

评论

0/150

提交评论