版权归原作者所有,如有侵权,请联系我们

[科普中国]-异常信息

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

异常信息是指异常的类型、异常发生的位置及时间等信息。异常信息一般可以分为两种:定义的异常信息和非定义的异常信息。定义的异常信息是指软件系统或程序对一些常见的异常已经说明了异常的类型及处理方法;非定义的异常信息是异常是不在系统或程序预期范围内,这类异常信息一般只说明发生异常的位置,没有异常处理方法,这一种信息也可以称作漏洞信息。漏洞即受限制的计算机、组件、应用程序或其他联机资源无意中留下的不受保护的入口点。互联网上一些网站有安全防范方面的设计缺陷,这些不受保护的入口点,可能被人非法进入、窃取资料1。

异常处理概述异常处理,英文名为exceptional handling,是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。 异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。

通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。

从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。

从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。

异常安全一段代码是异常安全的,如果这段代码运行时的失败不会产生有害后果,如内存泄露、存储数据混淆、或无效的输出。异常安全可分成不同层次:

失败透明(failure transparency),也称作不抛出保证(no throw guarantee):代码的运行保证能成功并满足所有的约束条件,即使存在异常情况。如果出现了异常,将不会对外进一步抛出该异常。(异常安全的最好的层次)

提交或卷回的语义(commit or rollback semantics),或称作强异常安全(strong exception safety)或无变化保证(no-change guarantee):运行可以是失败,但失败的运行保证不会有负效应,因此所有涉及的数据都保持代码运行前的初始值。

基本异常安全(basic exception safety):失败运行的已执行的操作可能引起了副作用,但会保证状态不变。所有存储数据保持有效值,即使这些数据与异常发生前的值有所不同。

最小异常安全(minimal exception safety)也称作无泄漏保证(no-leak guarantee):失败运行的已执行的操作可能在存储数据中保存了无效的值,但不会引起崩溃,资源不会泄漏。

异常不安全(no exception safety):没有保证(最差的异常安全层次)。

异常信息监控、分析和诊断的方法引言工业控制领域,很多现场设备都使用基于 WinCE 系统的应用程序来满足工业环境的控制需求。然而,一旦应用程序特别是设备驱动出现异常,则只能通过串口查看一些信息。对从事系统定制和应用开发的工程技术人员解决所遇到的调试问题很不方便, 根本无法快速分析问题和定位问题, 导致解决问题效率不高。因此有必要提供一种WinCE异常信息监控、 分析和诊断的方法, 记录WinCE系统运行过程中设备驱动、应用程序的异常信息。当 WinCE 系统或应用程序发生异常时,可以通过查看异常信息和诊断结果来提高解决问题的效率。

总体设计本设计提出的 WinCE 异常信息监控、分析和诊断方法实际上是由监控模块、诊断模块、本地显示终端模块、远程显示终端模块和远程客户端组成。监控模块、诊断模块、本地显示终端模块和远程显示终端模块是本设计的核心模块,每一个模块都代表一个进程,这四个进程都是随着 WinCE 系统的启动而自动启动运行。其中监控模块的作用是跟踪记录关于设备驱动和应用程序的异常信息; 诊断模块的作用是根据监控数据进行综合统计分析, 并生成诊断结果;本地显示终端模块的作用是在工业设备的本地客户端显示异常信息;远程显示终端的作用是将所记录的工业设备异常信息显示到远程客户端上,是对本地显示终端模块的扩展和延伸。

软件设计监控模块的主要职责是记录 WinCE 系统的设备驱动和各种应用程序的异常信息, 该模块功能包括初始化、固件 ID 校验、授权认证、设备模块、系统日志模块、数据库模块和记录模块。监控模块是异常信息监控的基础,也是后续本地显示终端模块和远程显示终端模块所需要的信息显示的数据来源。监控模块方框图如图 1 所示。

初始化的作用是对监控模块的数据结构、线程、任务调度机制进行初始化,并分配一块用于缓存系统日志的内存(命名为 LogBuf) ,为监控模块的顺利运行建立框架。

固件 ID 校验的作用是对工业设备本身的合法性进行判定,工业设备上集成了一个用于 ID 校验的只读Flash 芯片,该芯片在集成到工业设备上之前会经专业设备写入一段 ID 码。工业设备本身的合法性由其合法的 ID 码决定,从合法的工业设备的只读 Flash 芯片里所读取的 ID 码经过校验才能使固件 ID 校验返回正确的成功值,否则固件 ID 校验失败,说明该工业设备本身的合法性受到质疑,整个监控模块将异常退出。

固件 ID 校验主要确保硬件体系, 即工业设备本身是合法的, 防止在非法的工业硬件体系上非法使用监控模块。授权认证的作用是对使用 WinCE 系统用户的合法性进行判定。 监控模块的运行权限只有特定的用户才拥有,并不是所有的 WinCE 系统用户都能随意运行监控模块。 授权认证主要根据当前运行的 WinCE 系统的用户和拥有权限的合法用户进行比对,如果比对的结果为真值,即当前运行的 WinCE 系统用户是合法的用户,那么授权认证返回正确的成功值,否则将表明当前运行的 WinCE 系统用户不是合法的授权用户,授权认证失败, 整个监控模块将异常退出。 授权认证的目的在于保护监控模块在合法的 WinCE 系统用户下运行,防止该模块在任意非法用户下滥用。

设备模块的作用是对工业设备的所有硬件外设和应用程序进行探测,获取相关硬件外设和应用程序的资源配置信息。这些硬件外设包含处理器、USB 设备、网络端口、键盘鼠标、WiFi 模块、3G/4G 模块、串口设备、并口设备、存储介质等。设备模块程序探测这些硬件外设获得相应的基地址、中断、驱动参数等信息。运行在 WinCE 系统上的应用程序都是和这些硬件外设相关的,应用程序和硬件外设的驱动程序频繁交换数据,因此应用程序的运行状态也能如实反映硬件外设的状态。故此设备模块也需要获取应用程序的资源配置信息,如内存碎片、程序运行的 CPU 占用率、程序运行的内存占用率等。

接着就是数据库模块,数据库模块的作用是依据设备模块获取的硬件外设和应用程序的资源配置信息建立相应的硬件外设数据库表。所建立的硬件外设数据库表不仅包含硬件外设的资源配置信息,还包含与该硬件外设相关的应用程序的资源信息。数据库模块所建立的硬件外设数据库表与硬件外设是一一对应的,硬件外设的数目与数据库模块所建立的硬件外设数据库表是一致的。硬件数据库表包含处理器表、USB 设备表、网络端口表、键盘鼠标表、WiFi 模块表、3G/4G 模块表、串口设备表、并口设备表、存储介质表等,这些数据库表中包含硬件外设及其应用程序的资源配置信息2。

系统日志模块的作用是将系统向串口输出的调试信息写入到缓存内存区 LogBuf,并给每条调试信息添加时间信息,同时通知记录模块记录系统日志数据。最后就是记录模块,记录模块的作用是监控各个硬件外设的实时状态数据,并将异常的信息写入数据库中与硬件外设相对应的硬件外设表中。记录模块所监控的实时状态数据包含硬件外设的基地址、中断、驱动参数,及其应用程序的内存碎片、程序运行的 CPU 占用率、程序运行的内存占用率和系统日志等,如果上述被监控的数据发生了变化,那么就认为出现了一次异常,并立即将此异常信息写入相应的硬件外设表中,同时写入时间戳,供后续的诊断模块分析。

诊断分析模块分为参数设置、规则设置和分析诊断三个部分。参数设置用于设置诊断过程中需要使用的关键词,例如 Error、Warning、Failed、Timeout、CPU、COM 等;规则设置用于设置诊断分析过程中使用的规则,如与(&) 、或(||) 、非(!)等;诊断分析根据参数设置、规则设置和数据库模块中的各个数据表进行综合统计分析,并生成诊断结果写入数据库(也可以是文件)。