linux 下 c 程序的异常处理技巧

linux 下 c 程序的异常处理技巧

ID:9251433

大小:14.50 KB

页数:5页

时间:2018-04-25

linux 下 c  程序的异常处理技巧_第1页
linux 下 c  程序的异常处理技巧_第2页
linux 下 c  程序的异常处理技巧_第3页
linux 下 c  程序的异常处理技巧_第4页
linux 下 c  程序的异常处理技巧_第5页
资源描述:

《linux 下 c 程序的异常处理技巧》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux下C++程序的异常处理技巧 处理C++中的异常会在语言级别上遇到少许隐含限制,但在某些情况下,您可以绕过它们。学习各种利用异常的方法,您就可以生产更可靠的应用程序。保留异常来源信息  在C++中,无论何时在处理程序内捕获一个异常,关于该异常来源的信息都是不为人知的。异常的具体来源可以提供许多更好地处理该异常的重要信息,或者提供一些可以附加到错误日志的信息,以便以后进行分析。  为了解决这一问题,可以在抛出异常语句期间,在异常对象的构造函数中生成一个堆栈跟踪。ExceptionTracer是示范这种行为的一个类。清单1.在异常对象构造函数中生成一个堆栈跟踪//Sample

2、Program://Compiler:gcc3.2.3//Linux:RedHat#include#include#include#includeusingnamespacestd;/////////////////////////////////////////////classExceptionTracer{ public:ExceptionTracer(){ void*array[25]; intnSize=backtrace(array,25); char**symbols=backtr

3、ace_symbols(array,nSize);  for(inti=0;i

4、内核可能发出信号的C++异常的抽象。SignalTranslator是一个基于SignalExceptionClass的模板类,它通常用来实现到C++异常的转换。在任何瞬间,只能有一个信号处理程序处理一个活动进程的一个信号。因此,SignalTranslator采用了singleton设计模式。整体概念通过用于SIGSEGV的SegmentationFault类和用于SIGFPE的FloatingPointException类得到了展示。清单2.将信号转换成异常templateclassSignalTranslator{ pr

5、ivate:classSingleTonTranslator{ public:SingleTonTranslator(){ signal(SignalExceptionClass::GetSignalNumber(),SignalHandler);}staticvoidSignalHandler(int){ throwSignalExceptionClass();} }; public:SignalTranslator(){ staticSingleTonTranslators_objTranslator;}};//AnexampleforSIGSEGVclassSegmenta

6、tionFault:publicExceptionTracer,publicexception{ public:staticintGetSignalNumber(){returnSIGSEGV;}};SignalTranslatorg_objSegmentationFaultTranslator;//AnexampleforSIGFPEclassFloatingPointException:publicExceptionTracer,publicexception{ public:staticintGetSignalNumber(){retu

7、rnSIGFPE;}};SignalTranslatorg_objFloatingPointExceptionTranslator;管理构造函数和析构函数中的异常  在全局(静态全局)变量的构造和析构期间,每个ANSIC++都捕获到异常是不可能的。因此,ANSIC++不建议在那些其实例可能被定义为全局实例(静态全局实例)的类的构造函数和析构函数中抛出异常。换一种说法就是永远都不要为那些其构造函数和析构函数可能抛出异常的类定义全局(静

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。