ysexception.h
来自「电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下」· C头文件 代码 · 共 98 行
H
98 行
#ifndef YSEXCEPTION_H#define YSEXCEPTION_H//////////////保留异常信息来源////////////////////////////#include "ysheader.h"using namespace std;class ExceptionTracer{ public: ExceptionTracer() { void* array[25]; int nSize=backtrace(array,25); char** symbols=backtrace_symbols(array,nSize); for(int i=0;i<nSize;i++) { cout<<symbols[i]<<endl; } free(symbols); }};//////////////////管理信号//////////////////////////template <class SignalExceptionClass> class SignalTranslator{ private: class SingleTonTranslator { public: SingleTonTranslator() { signal(SignalExceptionClass::GetSignalNumber(),SignalHandler); } static void SignalHandler(int i) { throw SignalExceptionClass(); } }; public: SignalTranslator() { static SingleTonTranslator s_objTranslator; }};class SegmentationFault : public ExceptionTracer,public exception{ public: static int GetSignalNumber() {return SIGSEGV;}};class FloatingPointException : public ExceptionTracer,public exception{ static int GetSignalNumber() {return SIGFPE;}};/////////////////////////管理构造函数和析构函数中的异常////////////////////////////class ExceptionHandler{ private: class SingleTonHandler { public: SingleTonHandler() { set_terminate(Handler); } static void Handler() { try { throw; } catch(SegmentationFault &) { cout<<"SegmentationFault"<<endl; } catch(FloatingPointException &) { cout<<"FloatingPointException"<<endl; } catch(...) { cout<<"Unknow Exception"<<endl; } abort(); } }; public: ExceptionHandler() { static SingleTonHandler s_objHandler; }};#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?