//程序崩潰規避函數
//Windows
一、設置編譯器"Enable C++ Exceptions"爲"/EHa",即"Yes with SEH Exceptions",
使得應用程序能夠捕獲因自身引發的大部分系統異常,少部分不可迴避的系統異常依然
會致使程序崩潰退出;
二、用"try{}catch(...){}"包裹可能會發生崩潰(越界、段錯誤、除零等操做)的代碼段,
在catch中處理異常。編譯器
* 高版本VC提供_set_invalid_parameter_handler函數,亦可處理致命異常,由於這個
是全局生效的,因此不推薦使用。it
//Unix
一、越界、段錯誤、除零等操做一般會觸發信號"SIGSEGV",能夠使用signal函數設定指定
信號的處理函數,除了"SIGSEGV",還有若干個可被應用程序截獲的信號,能夠根據自
己的需求去截獲這些信號信號並處理;
二、若是想跳回某一處代碼(好比崩潰以前設置的"jmp_buf"標誌),能夠在signal處理函
數中使用longjmp函數跳轉至指定的"jmp_buf"標誌處。io
* 由於部分信號爲標C裏定義的,針對部分信號(好比"SIGSEGV")的截獲處理亦適用於Windows平臺。編譯