欢迎来到天天文库
浏览记录
ID:8905426
大小:13.74 KB
页数:8页
时间:2018-04-11
《c语言中几种输出调试信息的方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在调试程序时,输出调试信息是一种普遍、有效的方法。输出调试信息一般有以下五种方法:方法一:直接使用屏幕打印函数printf。该方法直接在需要输出调试信息的位置使用函数printf输出相应的调试信息,以及某些关键变量的值。我们通过以下求阶层的函数fact来看看该方法的调试程序过程。 #include intfact(intn) { inti,f=1; for(i=1;i<=n;i++) { f+=i; } returnf; } intmain() { p
2、rintf("4!=%d/n",fact(4)); return0; } 程序1:有bug的求阶层函数程序1编译运行的结果如下:4!=11结果错误。为了找到结果错误的原因,我们在语句"f+=i;"之后插入函数printf输出调试信息,如程序2。 #include intfact(intn) { inti,f=1; for(i=1;i<=n;i++) { f+=i; printf("i=%d;f=%d/n",i,f); }
3、returnf; } intmain() { printf("4!=%d/n",fact(4)); return0; } 程序2:加入函数printf输出调试信息的求阶层函数再编译运行该程序,屏幕输出如下:i=1;f=2i=2;f=4i=3;f=7i=4;f=114!=11原来语句"f+=i"错了,应该为"f*=i"。修改过来(见程序3),再编译运行,结果如下:i=1;f=1i=2;f=2i=3;f=6i=4;f=244!=24 #include intfact(intn) { inti,f=1; for(i
4、=1;i<=n;i++) { f*=i; printf("i=%d;f=%d/n",i,f); } returnf; } intmain() { printf("4!=%d/n",fact(4)); return0; } 程序3:修改正确的求阶层函数调试完成,bug找到,并修改正确。然后将加入的调试的函数printf删除或注释掉。该方法的缺点是(1)在正式发布的程序中需要去除或注释掉这些调试语句;(2)若程序又出现bug,则又需要重新插入函数printf
5、输出调试信息,造成工作的重复。方法二:自定义调试函数debug。为了避免方法一的缺点,可以利用条件编译技术,如程序4自定义调试函数debug。当程序正式发布的编译时取消宏定义__DEBUG__,在正式发布的程序中就不会输出调试信息。若又出现bug,只要重新在编译程序时定义宏__DEBUG__即可恢复原来的调试信息输出。可以在编写程序时就有目的事先插入些调试语句,这将有益于调试程序。另外,可以根据需要编写函数debug,将调试信息输出到除屏幕以外的其它地方,如文件或syslog服务器等。 #include #ifdef__DEBUG__ #include6、rg.h> voiddebug(constchar*fmt,...) { va_listap; va_start(ap,fmt); vprintf(fmt,ap); va_end(ap); } #else voiddebug(constchar*fmt,...) { } #endif intfact(intn) { inti,f=1; for(i=1;i<=n;i++) { f*=i; debug("i=%d;f=%d/n"7、,i,f); } returnf; } intmain() { printf("4!=%d/n",fact(4)); return0; } 程序4:自定义调试函数debug该方法的缺点是(1)调试信息要么全部输出,要么全不输出;(2)要重新输出调试信息时需要重新编译程序。方法三:含调试等级的自定义调试函数debug。可以继续改进方法,避免方法二中的缺点。我们可以根据调试信息的细节程度,将调试信息分成不同的等级。调
6、rg.h> voiddebug(constchar*fmt,...) { va_listap; va_start(ap,fmt); vprintf(fmt,ap); va_end(ap); } #else voiddebug(constchar*fmt,...) { } #endif intfact(intn) { inti,f=1; for(i=1;i<=n;i++) { f*=i; debug("i=%d;f=%d/n"
7、,i,f); } returnf; } intmain() { printf("4!=%d/n",fact(4)); return0; } 程序4:自定义调试函数debug该方法的缺点是(1)调试信息要么全部输出,要么全不输出;(2)要重新输出调试信息时需要重新编译程序。方法三:含调试等级的自定义调试函数debug。可以继续改进方法,避免方法二中的缺点。我们可以根据调试信息的细节程度,将调试信息分成不同的等级。调
此文档下载收益归作者所有