亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++程序的異常處理技巧

2019-11-17 05:00:21
字體:
來源:轉載
供稿:網友
處理 C++ 中的異常會在語言級別上碰到少許隱含限制,但在某些情況下,您可以繞過它們。學習各種利用異常的方法,您就可以生產更可靠的應用程序。保留異常來源信息在C++中,無論何時在處理程序內捕捉一個異常,關于該異常來源的信息都是不為人知的。異常的具體來源可以提供許多更好地處理該異常的重要信息,或者提供一些可以附加到錯誤日志的信息,以便以后進行分析。 為了解決這一問題,可以在拋出異常語句期間,在異常對象的構造函數中生成一個堆棧跟蹤。ExceptionTracer是示范這種行為的一個類。 清單 1. 在異常對象構造函數中生成一個堆棧跟蹤// Sample PRogram:

// Compiler: gcc 3.2.3 20030502

// linux: Red Hat#include <execinfo.h>

#include <signal.h>#include <exception>

#include <iostream>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);

}

};治理信號每當進程執行一個令人討厭的動作,以致于 Linux? 內核發出一個信號時,該信號都必須被處理。信號處理程序通常會釋放一些重要資源并終止應用程序。在這種情況下,堆棧上的所有對象實例都處于未破壞狀態。另一方面,假如這些信號被轉換成C++ 異常,那么您可以優雅地調用其構造函數,并安排多層 catch 塊,以便更好地處理這些信號。 清單 2 中定義的 SignalExceptionClass,提供了表示內核可能發出信號的 C++ 異常的抽象。SignalTranslator 是一個基于 SignalExceptionClass 的模板類,它通常用來實現到 C++ 異常的轉換。在任何瞬間,只能有一個信號處理程序處理一個活動進程的一個信號。因此,SignalTranslator 采用了 singleton 設計模式。整體概念通過用于 SIGSEGV 的 SegmentationFault 類和用于 SIGFPE 的FloatingPointException 類得到了展示。 清單 2. 將信號轉換成異常



template <class SignalExceptionClass> class SignalTranslator

{

private:

class SingleTonTranslator

{

public:

SingleTonTranslator()

{

signal(SignalExceptionClass::GetSignalNumber(),

SignalHandler);

}static void SignalHandler(int)

{

throw SignalExceptionClass();

}

};public:

SignalTranslator()

{

static SingleTonTranslator s_objTranslator;

}

};// An example for SIGSEGV

class SegmentationFault : public ExceptionTracer, public

exception

{

public:

static int GetSignalNumber() {return SIGSEGV;}

};SignalTranslator<SegmentationFault>

g_objSegmentationFaultTranslator;// An example for SIGFPE

class FloatingPointException : public ExceptionTracer, public

exception

{

public:

static int GetSignalNumber() {return SIGFPE;}

};SignalTranslator<FloatingPointException>

g_objFloatingPointExceptionTranslator;    治理構造函數和析構函數中的異常在全局(靜態全局)變量的構造和析構期間,每個 ANSI C++ 都捕捉到異常是不可能的。因此,ANSI C++ 不建議在那些其實例可能被定義為全局實例(靜態全局實例)的類的構造函數和析構函數中拋出異常。換一種說法就是永遠都不要為那些其構造函數和析構函數可能拋出異常的類定義全局(靜態全局)實例。不過,假如假定有一個特定編譯器和一個特定系統,那么可能可以這樣做,幸運的是,對于Linux 上的 GCC,恰好是這種情況。 使用 ExceptionHandler 類可以展示這一點,該類也采用了 singleton 設計模式。其構造函數注冊了一個未捕捉的處理程序。因為每次只能有一個未捕捉的處理程序處理一個活動進程,構造函數應該只被調用一次,因此要采用 singleton 模式。應該在定義有問題的實際全局(靜態全局)變量之前定義 ExceptionHandler 的全局(靜態全局)實例。 清單 3. 處理構造函數中的異常class ExceptionHandler


{

private:

class SingleTonHandler

{

public:

SingleTonHandler()

{

set_terminate(Handler);

}static void Handler()

{

// Exception from constrUCtion/destruction of global  variables try

{

// re-throw throw;

}

catch (SegmentationFault &)

{

cout << “SegmentationFault” << endl;

}

catch (FloatingPointException &)

{

cout << “FloatingPointException” << endl;

}

catch (...)

{

cout << “Unknown Exception” << endl;

}//if this is a thread performing some core activity

abort();

// else if this is a thread used to service requests

// pthread_exit();

}

};public:

ExceptionHandler()

{

static SingleTonHandler s_objHandler;

}

};//////////////////////////////////////////////////////////////////////////class A

{

public:

A()

{

//int i = 0, j = 1/i;

*(int *)0 = 0;

}

};// Before defining any global variable, we define a dummy instance

// of ExceptionHandler object to make sure that

// ExceptionHandler::SingleTonHandler::SingleTonHandler() is

invoked

ExceptionHandler g_objExceptionHandler;

A g_a;//////////////////////////////////////////////////////////////////////////int main(int argc, char* argv[])

{

return 0;

}    處理多線程程序中的異常有時一些異常沒有被捕捉,這將造成進程異常中止。不過很多時候,進程包含多個線程,其中少數線程執行核心應用程序邏輯,同時,其余線程為外部請求提供服務。假如服務線程因編程錯誤而沒有處理某個異常,則會造成整個應用程序崩潰。這一點可能是不受人們歡迎的,因為它會通過向應用程序傳送不合法的請求而助長拒絕服務攻擊。為了避免這一點,未捕捉處理程序可以決定是請求異常中止調用,還是請求線程退出調用。清單3 中 ExceptionHandler::SingleTonHandler::Handler() 函數的末尾處展示了該處理程序。 結束語我簡單地討論了少許 C++ 編程設計模式,以便更好地執行以下任務: ·在拋出異常的時候追蹤異常的來源。

·將信號從內核程序轉換成 C++ 異常。

·捕捉構造和/或析構全局變量期間拋出的異常。

·多線程進程中的異常處理。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区四区五区| 国产欧美日韩精品丝袜高跟鞋| 午夜精品久久久久久久99热浪潮| www.亚洲一区| 在线日韩日本国产亚洲| 亚洲一区二区三区777| 精品视频久久久| 国产精品久久久久影院日本| 欧美韩日一区二区| 亚洲免费一在线| 精品亚洲男同gayvideo网站| 92版电视剧仙鹤神针在线观看| 人妖精品videosex性欧美| 91性高湖久久久久久久久_久久99| 欧美视频中文字幕在线| 亚洲人线精品午夜| 2019中文字幕在线观看| 国产一区二区三区日韩欧美| 亚洲国产精品系列| 日韩美女写真福利在线观看| 久久久国产在线视频| 日本a级片电影一区二区| 尤物九九久久国产精品的分类| 亚洲第一网中文字幕| 福利微拍一区二区| 奇米影视亚洲狠狠色| 国产精品免费在线免费| 亚洲国产欧美精品| 日韩经典中文字幕| 亚洲精品久久久一区二区三区| 中文日韩电影网站| 97**国产露脸精品国产| 国产精品扒开腿爽爽爽视频| 欧美日韩另类在线| 欧美天堂在线观看| 91色琪琪电影亚洲精品久久| 另类天堂视频在线观看| 中文字幕精品影院| 日韩精品在线私人| 91国偷自产一区二区三区的观看方式| 97国产真实伦对白精彩视频8| 国产精品嫩草视频| 伊人男人综合视频网| 亚洲男人的天堂在线| 亚洲缚视频在线观看| 精品亚洲va在线va天堂资源站| 中文字幕自拍vr一区二区三区| 国产福利精品在线| 成人网在线免费观看| 亚洲成人在线网| 亚洲精品资源美女情侣酒店| 操人视频在线观看欧美| 国产精品视频一区二区高潮| 欧美亚洲成人xxx| 国产福利精品av综合导导航| 亚洲精品xxxx| 国产精品成av人在线视午夜片| 色综合久久中文字幕综合网小说| 日本久久久a级免费| 久久人91精品久久久久久不卡| 国产精品com| 国内精品一区二区三区四区| 亚洲精选一区二区| 成人看片人aa| 日本一区二区三区四区视频| 在线观看精品国产视频| 91欧美精品成人综合在线观看| 欧美亚洲日本黄色| 欧美人成在线视频| 亚洲国产精品资源| 欧美日韩国产999| 国产suv精品一区二区三区88区| 国产精品情侣自拍| 91国内揄拍国内精品对白| 久久久久久久久久久免费精品| 久久久国产精彩视频美女艺术照福利| 国产精品视频不卡| 91精品91久久久久久| 国产香蕉精品视频一区二区三区| 国产成人一区三区| 日韩中文字幕视频在线观看| 日韩精品亚洲视频| 欧美一区二区三区艳史| 日韩成人性视频| 久久精品夜夜夜夜夜久久| 91丝袜美腿美女视频网站| 亚洲男女自偷自拍图片另类| 日韩精品亚洲元码| 亚洲精品中文字幕女同| 欧美一级片久久久久久久| 久久久久久久久久久亚洲| 日韩精品视频中文在线观看| 久久精品国产电影| 亚洲va电影大全| 亚洲一区二区三区xxx视频| 中文字幕亚洲欧美一区二区三区| 久久综合久久八八| 久久久久国产视频| 欧美激情一级二级| 成人深夜直播免费观看| 性欧美办公室18xxxxhd| 久久久国产精品视频| 国产精品电影观看| 久久免费视频在线| 欧美激情在线视频二区| 精品久久久久久久久久久| 欧美视频二区36p| 久久久人成影片一区二区三区观看| 亚洲一区二区三区视频播放| 国产精品美女网站| 日韩欧美视频一区二区三区| 亚洲国产欧美在线成人app| 久久久欧美精品| 久久久精品电影| 一区二区中文字幕| 成人妇女免费播放久久久| 在线视频精品一| 91天堂在线观看| 中文字幕亚洲精品| 91在线观看免费高清完整版在线观看| 日韩电影中文字幕在线观看| 欧美黄色片在线观看| 国产成人av网| 国产精品99久久久久久久久| 日韩精品中文在线观看| 成人亚洲欧美一区二区三区| 欧美激情乱人伦| 欧美日韩国产综合视频在线观看中文| 91精品国产精品| 91亚洲精品久久久| 美日韩精品免费观看视频| 国产乱肥老妇国产一区二| 亚洲a在线观看| 日韩极品精品视频免费观看| 国产精品国产福利国产秒拍| 国产啪精品视频| 啊v视频在线一区二区三区| 日韩av在线免费看| 日韩av在线看| 国产精品视频精品| 精品国产乱码久久久久酒店| 5566成人精品视频免费| 成人精品福利视频| 另类视频在线观看| 精品视频久久久久久久| 国产精品电影久久久久电影网| 久久久久久成人| 亚洲天堂av在线播放| 亚洲影视九九影院在线观看| 欧美性猛交xxxx免费看| 欧美亚洲国产日本| 57pao国产精品一区| 久久99视频精品| 久久久国产视频91| 国产精品激情av电影在线观看| 欧洲s码亚洲m码精品一区| 欧美性猛交xxxx乱大交极品| 欧美精品电影免费在线观看| 最近2019中文字幕大全第二页| 久久久国产在线视频| 黄色一区二区三区| 国内自拍欧美激情| 亚洲欧美三级在线| 久久久噜噜噜久久中文字免|