Linux下C程序的异常处理技巧介绍

Linux下C程序的异常处理技巧介绍

ID:44209292

大小:50.00 KB

页数:4页

时间:2019-10-19

Linux下C程序的异常处理技巧介绍_第1页
Linux下C程序的异常处理技巧介绍_第2页
Linux下C程序的异常处理技巧介绍_第3页
Linux下C程序的异常处理技巧介绍_第4页
资源描述:

《Linux下C程序的异常处理技巧介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux下C卄程序的异常处理技巧介绍处置C++中的反常会在言语级别上遇到少量隐含约朿,但在某些状况下,您能够绕过它们。学习各种运用反常的办法,您就能够出产更牢靠的使用程序。保存反常來历信息在C++中,无论何吋在处置程序内捕获i个反常,关于该反常来历的信息都是不为人知的。反常的详细来历能够供给许多非常好地处置该反常的重要信息,或许供给一些能够附加到过错日志的信息,以便今后进行剖析。为了处置这一疑问,能够在抛出反常句子时间,在反常目标的结构函数中牛成一个仓库盯梢。ExceptionTracer是演zj<这种行动的一个类。清单1.在反常目标结构函数中生成一个仓库盯梢//Sampl

2、eProgram://Compiler:gcc32320030502//Linux:RedHat#include#include#include#includeusingnamespacestd;lllllllllllllllllllllllllllllllllllllllllllllclassExceptionTracer{public:ExceptionTracer(){void*array[25];intnSize=backtrace(array,25);char**symbols=backtrace_symbols(array,nSize);for(inti=0;i<

3、nSize;i++){cout«symbols[i]«endl;}free(symbols);)};办理信号每逢进程履行一个令人讨厌的动作,以致于Linux?内核宣布一个信号时,该信号都必须被处置。信号处置程序一般会开释一些重耍资源并停止使用程序。在这种状况下,仓库上的一切目标实例都处于耒损坏状况。另一方血,若是这些信号被变换成C++反常,那么您能够高雅地调用其结构函数,并组织多层catch块,以便非常好地处置这些信号。清单2中界说的SignalExceptionClass,供给了表明内核能够宣布信号的C++反常的笼统。SignalTranslator是一个根据SignalE

4、xceptionClass的模板类,它一般用来完成到C++反常的变换。在任何刹那间,只能有一个信号处置程序处置一个活动进程的一•个信号。因而,SignalTranslator选丿U了singleton描绘形式。全体概念经过丿II于SIGSEGV的SegmentationFault类和用于SIGFPE的FloatingPointException类得到了展现。清单2.将信号变换成反常templateclassSignalTranslator{private:classSingleTonTranslator{public:SingleTonTranslator(){signal(

5、SignalExceptionClass::GetSignalNumber(),SignalHandler);}staticvoidSignalHandler(int){throwSignalExceptionClass();}};public:SignalTranslator(){staticSingleTonTranslators_objTranslator;}};//AnexampleforSIGSEGVclassSegmentationFault:publicExceptionTracer,publicexception{public:staticintGetSign

6、alNumber(){returnSIGSEGV;}};SignalTranslatorg_objSegmentationFaultTranslator;//AnexampleforSIGFPEclassFloatingPointException:publicExceptionTracer,publicexception{public:staticintGetSignalNumber(){retumSIGFPE;)};SignalTranslatorg_objFloatingPointExceptionTranslator;办理结构函数和析构函数中的反常在大局(静态大局)变

7、量的结构和析构时间,每个ANSIC++都捕获到反常是不能够的。因而,ANSIC++不主张在那些其实例能够被界说为大局实例(静态人局实例)的类的结构函数和析构函数中抛出反常。换•种说法即是永久都不要为那些其结构函数和析构函数能够抛出反常的类界说大局(静态大局)实例。不过,若是假定有一个特定编译器和一个特定体系,那么能够能够这样做,走运的是,关于Linux上的GCC,恰好是这种状况。运川ExceptionHandler类能够展现这一点,该类也选川了singleton描绘形式。以结构函数注册了一•个未捕获的处

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

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

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