现在的位置: 首页 > 综合 > 正文

C/C++错误管理(收集整理)

2017年07月28日 ⁄ 综合 ⁄ 共 1226字 ⁄ 字号 评论关闭

项目大了,需要对很多表达式的结果进行错误管理。

也就是所说的返回值的判断。

最近拿到一个关于C/C++错误管理的培训课题。

大家都讲讲自己在C/C++项目中错误管理的技巧:

1.如何定义错误代码或者是error 号?
      一般用宏定义统一定义error号,遇到不同模块,以及防止自己定义的error错误号和其他人相同,如何处理这些冲突?
      系统调用使用errno,其它模块出错号另外处理(宏定义);

2.哪些表达式或者函数返回值需要判断?
      说到这一点,我曾经看过一段代码,该代码对几乎所有的表达式或者函数的返回值或者结果都进行了判断,俨然变成了一个出错检查的代码。
      这个问题很难说清楚,看过一些帖子,从strcpy开始,讨论判断参数、返回值与效率的问题;
      如果一个表达式或者函数调用,存在失败的可能性,无论是其抛出异常还是错误返值,都必须进行错误处理。只不过异常和错误返值地捕获方式不同,导致了两种错误处理的形式可以不同。
对于异常,我们可以一并捕获多条语句产生的异常,而对于错误返值,我们必须要逐个处理。在同一个程序或者模块中,要保持一致的错误处理方式,要么使用异常要么使用错误返值,对于模块内不同的错误处理方式,即边界,需要进行方式转换。
      无论如何,你所看到的代码,错误处理都会占有一个相当的比例,这是很正常的,这也说明了编写程序的人的缜密思维以及体现了程序的健壮性。这里所讲的,排除那些对于程序理解不足,而导致的不必要的错误处理。
      最后,只要程序有失败的可能性,必须进行错误处理。

3。大家都有自己的专门的错误管理模块来专门处理错误状态以及提示吗?
      参考unix环境高级编程例子;

4.精准的定位出错误的出处(例如可以迅速的定位是哪一行哪一个函数出错)。

首先要提高代码质量。
1.将编译时的编译选项设置为打印所有告警信息,并将告警作为错误来处理。
2.pc-lint进行静态检查,清除所有错误。
3.用purify 进行运行时的检查。
4.做好单元测试,比如cppunit ,gtest.
5.编译时,加上-g,在coredump的时候,能够将信息保存下来。
6.做好日志模块,日志模块分等级,并且记录日志的文件和行号。
7.规划号返回的错误信息.

 

1. 一般定义的是枚举,枚举名有特定的前缀
2. 目前还没有什么好的建议,我们一般是检查那种可能会越过边界值的表达式的值,函数返回值主要可能会严重影响结果的时候才检查。
3. 项目中日志模块来处理错误及提示
4. 利用__FILE__, __FUNCTION__, __LINE__来定位错误的位置

更多请看原帖:1. 一般定义的是枚举,枚举名有特定的前缀
2. 目前还没有什么好的建议,我们一般是检查那种可能会越过边界值的表达式的值,函数返回值主要可能会严重影响结果的时候才检查。
3. 项目中日志模块来处理错误及提示
4. 利用__FILE__, __FUNCTION__, __LINE__来定位错误的位置

抱歉!评论已关闭.