📄 ysexception.h
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -