C/C++大型项目错误管理

在C/C++大型项目中,错误管理在项目中起着举足轻重的作用,以我自己的项目经验以及观摩其它项目,错误管理对项目框架以及开发效率有着非常大的影响。对于错误管理的认识大致分为三类:

  1. 刚刚開始敲代码的新手,满篇程序看不到一处关于返回出错的处理,更不用说出错管理了。说明他没认识到出错管理的重要性
  2. 程序中到处都能看到关于出错的处理。认识到了错误,可是处理方式欠缺
  3. 程序中差点儿不会非常明显的看到关于错误的处理。这是错误管理的最高境地。

错误管理,涉及到程序的健壮性,可恢复性,可靠性,高效性。在出错的情况下,程序任然可以相对稳健高效的运行。

以下我谈谈我自己在C/C++项目开发中关于错误管理的经验。

对于C/C++系统API,都提供了errno.h头文件,里面已经定义了绝大多数系统已知的错误以及其相应的错误提示。 參考《linux中出错处理》

一般系统自带的错误定义以及出错提示都不能非常好的满足实际的项目需求,毕竟项目中非常多都涉及到详细业务,假设笼统的使用系统定义的错误号以及描写叙述,并不能非常快的定义错误位置。通常须要我们自己又一次封装并定义错误。

《The Art of Unix Programming》中有一个原则说的非常好:Rule of Repair: When you must fail, fail noisily and as soon as possible。当程序遇到无法修复必须报错的时候,就让它马上用非常明显的方式报错。这句话非常简洁,可是缺描写叙述出了关于错误管理的理念。假设一定要出错,就非常明显的方式来表达,目的就是为了非常迅速精准的定位错误。出错不是期望,出错管理也不是目的,目的是为了在出错之后能非常快的定位错误使得程序可以非常快的恢复。

为了高速定位错误,有三个宏很实用:

__FILE__             //文件名称

__FUNCTION__   //函数名

__LINE__            //当前行号

一般针对不同的业务会有不同的模块。自己定义错误号的方式例如以下:

//EBASE最高位是1,保证错误号是负数,符合编程习惯
#define				EBASE			0X80000000

//串口业务模块
#define				ESERIAL			EBASE + 0XC8
#define				ESERIALTIMEOUT  ESERIAL + 1 //串口超时
#define				ESERIALREAD		ESERIAL + 2 //读串口错误
//....

//HTTP业务模块,与ESERIAL之间有200的差距,这样串口业务模块能够有200个错误号
#define				EHTTPSERVICE	EBASE + 0X190
#define				EHTTPTIME		EHTTPSERVICE + 1
#define				EHTTPGET		EHTTPSERVICE + 2
//...

//与EHTTPSERVICE有200差距,这样HTTP也能够有200个错误号
#define				EGSM			EBASE + 258

//....

模块化定义错误,通过错误号区间能够非常快的查阅错误模块。比如错误号是 -202,通过对比,毫无疑问是串口模块出错了。

接下来就是错误的翻译了。所谓错误翻译就是将错误号翻译成详细的语句。能够选择将错误描写叙述与错误号写入Excel表中,然后导出XML文件,在程序中错误描写叙述能够直接解析相应XML中错误号的描写叙述就可以。

还有一种比較常见的方式就是直接用宏写在一个头文件里。当然,__FILE__, __FUNCTION__这些不可缺少。

日志文件记录了程序后台执行状况以及出错前一刻程序正在做什么,一般能够从日志文件的数据分析程序的行为并定位错误。对于日志文件,我想C/C++程序猿都会写,这里我就不多说。一般打印错误提示的同一时候都会伴随着写日志。

一般都会用宏来写打印错误和写日志的操作,关于怎样写我这里不多说,我想非常多人都会。这里我想强调的事关于打印错误信息和写日志一定要设置开关。在实际项目中,我常常会遇到这样的问题,当有非常多地方都须要打印和记录log的时候,程序执行的非常慢,当我把写日志去掉,程序立刻就能非常快的执行。所以,设置开关是非常有必要的:

#ifndef LOG_OFF
#define WriteLog(file, line, function, desc)
//...一些写日志和打印操作

#else
#define  WriteLog(file, line, function, desc)
#endif 

这样,在程序中能够非常好的控制开关。提高效率

时间: 2024-12-19 19:52:29

C/C++大型项目错误管理的相关文章

大型项目需求管理解决方案

大型项目需求管理解决方案 面临的挑战 如何全面掌控大量需求的演变历程? 多方提供的需求存在差异,如何保证需求的格式及内容的一致? 面对大量需求,是否了解在更改某个需求时引发的蝴蝶效应? 潜在的用户需求不易充分识别,如何能更准确地建立系统性的需求? 能否掌握需求变更引发的工作量?能展现大量需求的跟踪矩阵么? 如何清晰的了解产品平台与项目需求的关联关系,实现需求复用? 面对庞大的需求池时束手无策,需求数量大.关系复杂.不断变更,该如何管理? oKit解决方案 由oKit作为整个公司唯一的需求管理平台

《国际项目集管理最佳实践与实战应用》大型复杂项目与项目群管理工作坊

<国际项目集管理最佳实践与实战应用>大型复杂项目与项目群管理工作坊 Program Management Training 主办单位:共创国际-项目管理者联盟 2015年4月10.11.12日 北京 & 课程前言 项目集(PROGRAM)定义为“经过协调管理以获取单独管理它们时无法取得收益与控制的一组关联的项目和项目集活动.”从组织战略的角度来看,项目集管理主要是指组织为实现其战略目标或为其客户提供整体解决方案而在组织高层针对战略性资源进行跨界整合的管理活动. 在全球经济一体化的背景下

项目集管理:管理大型项目、项目群与复杂项目的最佳实践

项目集(大型项目与项目群)管理(Program Management)是指对多个关联项目的集中管理与协调管理.项目集管理是组织高级管理人员在更高层面对大型战略项目与组织多项目的高级管理. 项目集管理是对一个项目集采取集中式的协调管理,以实现这个项目集的战略目标和收益,它包括把多个项目进行整合,以实现项目集目标,并使得成本.进度和工作可以被优化或集成.. 在项目集内的项目通过一个共同的成果或其交付的集合能力相关联.如果项目间的关系只是共有客户.供应商.技术或者资源,则此类工作应作为项目组合而不是作

怎么学习阅读大型项目的代码

第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪. 5.请将从开放源码软件中得到的益处看作是一项贷款, 尽可能地寻找各种方式来回报开放源码社团. 6.多数情况下,

4--项目整体管理和项目范围管理

项目整体管理和项目范围管理 1          项目整体管理 1.1 项目整体管理的过程包括如下内容: (1)      项目启动. (2)      制定初步的项目范围说明书. (3)      制定项目管理计划. (4)      指导和管理项目的执行. (5)      监督和控制项目. (6)      整体变更控制. (7)      项目收尾.     1.2项目启动 输入 技术与方法 输出 合同 项目管理方法论 项目章程 项目工作说明书 项目管理信息系统 环境与组织因素 专家判断

如何阅读大型项目的代码?

本文转载自:http://blog.csdn.net/jk110333/article/details/7563718 Technorati 标签: 源码阅读 -------------------------------我是分割线的开始------------------------------------------ ++++++++++++++++++++ 第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时,

在大型项目上,Python 是个烂语言吗

Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the Head TA for a class taught in Java at MIT. I used… Robert has 10+ answers in Google Engineering. Man, I cannot imagine writing let alone maintaining a

PMP:4.项目整合管理

====================项目整合管理======================== 项目整合管理包括对隶属于项目管理过程组的各种过程和项目管理活动进行识别.定义.组合. 统一和协调的各个过程. { 4.1 制定项目章程 - 编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文 件的过程. 4.2 制定项目管理计划 - 定义.准备和协调项目计划的所有组成部分,并把它们整合为一份综合项目管理计划的过程. 4.3 指导与管理项目工作 - 为实现项目目标而领导和执行项目管理计

4.13日第12次作业,16章外包,17章需求,19章组织级与大型项目

29-高项-田哲琦 16章.外包管理 1.外包的形式有哪五种?什么是利益关系?P346-348 答:企业现行采用的主要外包形式如下: 1).活动外包 2).服务外包 3).内包 4).合包 5).利益关系. 利益关系(benfit-based relationship),这是一种长期合作关系,双方先为此关系进行投资,再根据预先拟定的协议分享利益,共同承担风险,同时共享利益. 2.外包管理的目标是什么?要实现这个目标,对外包管理提出哪四个方面的要求?P348 答:软件外包管理总的目标是用强有力的手