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