• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            martin

            thinking

            常用鏈接

            統計

            software

            最新評論

            C++程序中的跟綜方法

            在應用開發構成中,我們經常在程序中加入一些打印語句,來對程序的執行流進行跟蹤.在C或C++中可以利用下列語句來實現:
            (1)
            printf("enter %s\n",(char *)funcName);
            cout<<"enter "<< s_funcName << endl;
             
            但這樣處理有點不足,就是該語句只輸出到標準輸出上,我有時希望這些輸出被定向到特定文件,輸出成日志.為此,我們可以把這些函數進行包裝,把輸出流ostream(標準輸出或文件輸出)作為包裝函數的一個參數:
            (2)
            printWrap(ostream out,format, args);
            注:此處的args, format表示要輸出的參數和相應的參數格式.
            當然我們還可以對它進行進一步的改進:在該函數中,加入預定以的符號常量__LINE__(當前源代碼行的行號,為整數常量),__FILE__(假定的源文件名,某個字符串).這樣我們可以知道程序運行到了那個源文件,并且那一行.
             
            現在(2)中的處理方式比(1)中處理方式已經有明顯的改善了.
            但這種方式還稍微有點不足.當我們想要跟蹤一個函數的執行,即知到執行流進入某函數,何時離開某函數時,這種處理方式有點不足.每個函數都有一個入口,但可能有多個出口,這樣就需要在每個入口和出口處加上printWrap(ostream out,args)語句,并且在C++中,當執行流遇到異常退出該函數時,可能有些printWrap語句并沒有被執行,從而沒有輸出記錄.
             
            為此,我們可以對(2)進行進一步改進.我們可以設計一個類,在該類對象的構造函數,析構函數中進行輸出.在函數的入口處,調用對象的構造函數進行輸出;在函數的出口處,或異常退出時,調用對象的析構函數進行輸出.
            我們可以把該類簡單總結如下:
            (3)
            class Trace{
                public:
                            Trace(int iDebugLevel,ostream out, format,args) { cout <<"Hello\n";}
                            ~Trace() { cout << " Goodby\n";}
                               int getDebugLevel();
                private:
                        ...
                         int    iDebugLevel;
                         ostream m_out;
            };
             
            注:  我們可以用printWrap(..)替換cout << ....。printWrap中的輸出流在Trace的構造函數中傳到Trace實例中,并被保存。
             
            我們還可以對它進行一點改進,以提高它的性能。因為采用上面的對象。則每次都會進行輸出或進行日志記錄.我們可以通過構造函數在Trace的實例中,設置一個iDebugLevel變量和ostream。并在系統中設置一個統一的debugLevel.在每次進行輸出時進行iDebugLevel, debugLevel比較,如果iDebugLevel <= debugLevel, 則進行輸出,否則則不進行輸出.
             

            posted on 2009-03-03 14:50 martin_yahoo 閱讀(125) 評論(0)  編輯 收藏 引用

            国产精品久久久久久吹潮| 伊人久久国产免费观看视频| 亚洲日韩中文无码久久| 久久青青草原精品国产| 高清免费久久午夜精品| 色综合久久久久综合99| 亚洲va久久久噜噜噜久久男同| 亚洲色大成网站www久久九| 国产A级毛片久久久精品毛片| 久久久久亚洲AV无码去区首| 久久精品国产AV一区二区三区| 亚洲国产成人久久综合碰碰动漫3d| 香港aa三级久久三级老师2021国产三级精品三级在 | 色综合久久无码五十路人妻| 久久精品草草草| 欧美黑人激情性久久| 久久久99精品一区二区| 国产精品一久久香蕉国产线看 | 久久天天躁狠狠躁夜夜av浪潮 | 亚洲国产精品无码久久| 人人狠狠综合久久亚洲88| 亚洲精品乱码久久久久久蜜桃不卡 | 久久播电影网| 亚洲国产成人久久精品动漫| 久久国产精品成人片免费| 久久综合久久美利坚合众国| 久久AⅤ人妻少妇嫩草影院| 久久精品人人做人人爽97| 亚洲精品美女久久777777| 亚洲日本va午夜中文字幕久久 | 99久久99这里只有免费费精品 | 国产99久久久国产精免费| 亚洲综合精品香蕉久久网97| 97久久久精品综合88久久| 99久久超碰中文字幕伊人 | 久久久久国产| 久久精品这里只有精99品| 国产高潮国产高潮久久久91 | 久久精品国产久精国产| 99麻豆久久久国产精品免费| 老司机国内精品久久久久|