首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

全面温习linux C语言系列-第四讲-程序调试

2012-11-06 
全面复习linux C语言系列--第四讲--程序调试?出错处理??1.使用标准错误输出?例子: 判断键盘上输入的字符是

全面复习linux C语言系列--第四讲--程序调试

?

出错处理

?

?1.使用标准错误输出

?

例子: 判断键盘上输入的字符是不是 0-9

?

#include <stdio.h>main(){        char ch;        scanf("%c",&ch);        if(!isdigit(ch))        {???????????? fprintf(stderr,"Please input a digit char\n");?        }}
?

打印errno的值:

?

printf("errno is: %d\n",errno);


?2.使用errno全局变量 ,errno中的内容应该在出错后立即使用,因为出错后不立即使用,可能在调用其他函数时又产生了错误,导致errno的原有值呗覆盖!

?

a. 使用? perror

#include <stdio.h>main(){    FILE *fp;    if((fp = fopen("./test.txt","r")) == NULL)    {         perror("fopen");         return;    }    printf("Open file success!\n");    fclose(fp);    return;}
?

b. 使用全局变量 erron

?

#include <stdio.h>#include <errno.h>main(){    FILE *fp;    if((fp = fopen("./test.txt","r")) == NULL)    {         fprintf(stderr,"fopne faild%s\n",strerror(errno));         return;    }    printf("Open file success!\n");    fclose(fp);    return;}
?


?3.使用出错信号处理 : 使用标准错误输出和errno变量进行错误处理,都是在可以预知的情况下进行的错误处理,所以预先编码进行错误处理,除此之外还有一种错误,是编码人员不知道何时会出现异常,此时就可以使用信号进行错误处理

?

例子:在被0除 的情况下,系统内核将向进程发送信息SIGFPE,编程人员可以在程序中捕获该信号进行处理

?

#include <stdio.h>#include <errno.h>#include <signal.h>void Handle_Sigfpe(int signo){    fprintf(stderr,"%d\n",signo);fprintf(stderr,"catch the signal!\n`");        exit(0);}main(){    int i,m,n;    if(signal(SIGFPE,Handle_Sigfpe) == SIG_ERR)    {        perror("signal");        return;    }    for(i=0;i<10;i++)    {         scanf("%d %d",&m,&n);         printf("%d / %d = %d\n",m,n,m/n);    }}
?

?


?4.使用assert断言

?

#include <stdio.h>#include <assert.h>#include <stdlib.h>int main( void ){    FILE *fp;    fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件    assert( fp );                        //所以这里不会出错    fclose( fp );    fp = fopen( "noexitfile.txt", "r" ); //以只读的方式打开一个文件,如果不存在就打开文件失败    assert( fp );                        //这里出错    fclose( fp );                        //该语句将不会执行    return 0;}
?


?5.内存泄露的检查


?6.其他可能的内存错误

?

?

?

?

热点排行