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

字號:

處理 C++ 中的異常會在語言級別上遇到少許隱含限制,但在某些情況下,您可以繞過它們。學(xué)習各種利用異常的方法,您就可以生產(chǎn)更可靠的應(yīng)用程序。
    保留異常來源信息
    學(xué)在C++中,無論何時在處理程序內(nèi)捕獲一個異常,關(guān)于該異常來源的信息都是不為人知的。異常的具體來源可以提供許多更好地處理該異常的重要信息,或者提供一些可以附加到錯誤日志的信息,以便以后進行分析。
    為了解決這一問題,可以在拋出異常語句期間,在異常對象的構(gòu)造函數(shù)中生成一個堆棧跟蹤。ExceptionTracer 是示范這種行為的一個類。
    清單 1. 在異常對象構(gòu)造函數(shù)中生成一個堆棧跟蹤
    // Sample Program:
    // Compiler: gcc 3.2.3 20030502
    // Linux: Red Hat
    #include
    #include
    #include
    #include
    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);
    }
    };