`
8366
  • 浏览: 812883 次
  • 性别: Icon_minigender_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.其他可能的内存错误

 

 

 

 

分享到:
评论

相关推荐

    C语言进阶-第一讲概述.pdf

    - **第四讲:** 存储器与指针,掌握内存管理与指针操作。 - **第五讲:** 数据结构与链表,学习高效的数据组织方式。 - **第六讲:** 中断与设备驱动,探索嵌入式系统的实时响应机制。 - **第七讲:** 编码风格,...

    AKA Linux编程系列讲座第二期的所有资料

    在本资源"AKA Linux编程系列讲座第二期的所有资料"中,您将深入学习Linux操作系统下的编程技术。这个系列讲座的第二期是一个精心设计的教程,旨在为初学者提供一个全面且详细的指导,涵盖了大量的理论知识和实践案例...

    embedded Linux大纲

    - **Gdb调试技术**:利用Gdb进行程序调试的方法。 - **Autoconf**:用于自动生成配置脚本的工具。 - **Automake**:用于自动生成Makefile文件。 - **Makefile**:介绍Makefile的基本语法与编写技巧。 - **代码...

    如何快速上手嵌入式Arm-Linux.pdf

    - **参考资料:** 韦东山《Linux应用开发完全手册》第四章、魏永明《Linux设备驱动程序》、宋宝华《Linux设备驱动开发详解》等。 - **参考视频:** 韦东山视频第二期至第四期、国嵌精通嵌入式系列教程的第四季和第五季...

    linux操作系统+linux下编程+实验报告及代码和操作过程+期末复习

    通过这个实验,学生不仅能巩固C语言的基础知识,还能提升在Linux操作系统中的实际编程技能,学会使用Makefile组织和管理项目,以及使用gdb进行程序调试。这对于今后的软件开发和系统级编程工作具有重要的实践价值。

    Linux 环境c程序设计源码+ppt(第二版)

    《Linux环境C程序设计》是徐诚先生在清华大学出版社出版的第二版教材,该书深入浅出地介绍了在Linux操作系统下进行C语言编程的基础知识和高级技巧。此资源包含源码和PPT,为读者提供了丰富的实践材料和教学辅助资料...

    嵌入式linux应用程序开发详解

    ### 嵌入式Linux应用程序开发详解 #### 一、嵌入式Linux基础 - **Linux发展概述**:自1991年Linus Torvalds发布第一个版本以来,Linux经历了快速的发展,逐渐成为最流行的开源操作系统之一。它不仅被广泛应用于...

    C-Primer-Plus(第6版)(中文版)1

    《C-Primer-Plus(第6版)(中文版)1》是一本关于C语言编程的入门书籍,适合初学者了解和学习C语言的基础知识。书中涵盖了C语言的起源、特性和应用范围,以及如何使用C语言进行程序设计的全过程。 1. C语言的起源:...

    Linux操作系统复习

    ### Linux操作系统复习知识点 #### 1. 网络协议中的面向连接协议 - **传输控制协议(TCP)**:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据包的可靠传输,适用于需要高可靠性的应用场景...

    21天学通Linux C编程(第2版)光盘内容

    《21天学通Linux C编程(第2版)》是一本旨在帮助初学者快速掌握Linux环境下C语言编程技能的教程。光盘内容包括了学习过程中至关重要的辅助材料,如电子教案(PPT)、习题参考答案以及源代码,这些资料对于深入理解...

    NOI笔试复习题

    从给定的文件信息中,我们可以总结出一系列与NOI(National Olympiad in Informatics,全国青少年信息学奥林匹克竞赛)笔试复习相关的IT知识点,主要集中在Linux操作系统的基本操作、编程语言概念以及程序调试等方面...

    嵌入式学习计划,绝对值10分

    - **第4、5周**:转向更高级的语言——C++,掌握面向对象的程序设计。 - **周一**:介绍面向对象的基本概念。 - **周二**:学习C++的基本输入输出、new和delete操作符等。 - **周三**:深入探讨类和对象的相关...

    嵌入式期末总结及考试复习题

    在嵌入式Linux开发中,GDB是一个常用的远程调试工具,GDB在宿主机上运行,通过GDBServer与目标机上的被调试程序通信。因此,选项D“被调试程序在宿主机上运行”是错误的。 常见的嵌入式GUI包括QTC、GNOME和MiniGUI...

    《Linux操作系统(下)》复习题参考.pdf

    《Linux操作系统(下)》复习题涉及到的知识点广泛,涵盖Linux系统的使用、调试工具、编程编译、文件管理、系统命令、权限、环境变量、进程管理、网络协议等多个方面。以下是对这些知识点的详细解释: 1. `gdb` 是GNU...

    Linux高级程序设计第三版杨宗德(源码+ppt)

    《Linux高级程序设计》第三版,由杨宗德教授撰写,是一本深入探讨Linux系统下程序开发的经典著作。这本书不仅涵盖了基本的编程概念,还详细讲解了如何在Linux环境中进行高效的程序设计。杨宗德教授以其丰富的教学和...

    教案《Linux操作系统(下)》复习题.pdf

    在题目中提到的命令中,`p n`用于打印变量n的值,`/b n`是在第n行设置断点,`/info n`显示断点信息,`/r`开始运行程序,`/c`继续执行直到下一个断点,`/s`进入函数内部单步调试,`/n`从当前行开始单步调试,而`/gdb`...

    Linux软件工程师模拟试卷与解析.pdf

    通过这些题目,读者可以复习和巩固Linux系统的基础知识,包括文件操作、进程管理、内存管理、GCC编译器的使用、GDB调试技巧以及C语言编程规范和逻辑判断等内容。这将有助于提高Linux软件工程师的技能水平和应对考试...

    嵌入式系统复习重点

    Android系统分四层,第一层由C语言实现,第二层由C/C++实现,第三层和第四层用JAVA实现。Android系统构架包括Linux内核、系统运行库、应用程序框架、应用程序等四个方面。 ARM(Advanced RISC Machines)是一种高...

    《嵌入式系统原理及应用》复习手册完整版.docx

    第四章至第六章则关注硬件层面,讲解了构建嵌入式最小系统的方法,设计数字输入输出系统和定时计数器组件的技巧。这些基础知识是实现设备控制和时间同步的基础,例如GPIO的配置和中断处理,以及各种定时器的工作原理...

Global site tag (gtag.js) - Google Analytics