• <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>

            deepway

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              1 Posts :: 9 Stories :: 1 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            • 1.?re: 軟件運(yùn)行日志[未登錄](méi)
            • 我覺(jué)得調(diào)試日志不應(yīng)該只記錄軟件的非正常過(guò)程吧,而是記錄軟件的運(yùn)行過(guò)程。期間有不正常的時(shí)候用warning,error和fetal來(lái)記錄。
            • --hi

            錯(cuò)誤一詞,在軟件開(kāi)發(fā)中,概念已經(jīng)非常泛濫,本文中暫時(shí)指,軟件中的一切非正常現(xiàn)象和事件。

            低層事件:指硬件相關(guān)的錯(cuò)誤,比如,除零、浮點(diǎn)錯(cuò)誤、內(nèi)存違例、中斷指令。按照C++的觀點(diǎn),它們不屬于C++異常的范疇,應(yīng)由底層錯(cuò)誤處理機(jī)制(檢查防范或SEH異常)來(lái)防范或者包裝成C++異常(筆者注:應(yīng)該是從處理效率的角度考慮的)。具體來(lái)說(shuō),除零和浮點(diǎn)錯(cuò)誤,應(yīng)以防范為主,為了效率也可以用SEH保護(hù)代碼段;中斷指令屬于用戶(hù)特殊行為,由用戶(hù)自行處理;內(nèi)存違例,應(yīng)該是絕對(duì)禁止的,以防范為主,一旦出現(xiàn),即應(yīng)該以未捕獲的SEH異常的形式,拋給調(diào)試報(bào)錯(cuò)工具處理,必要時(shí)由其進(jìn)行錯(cuò)誤現(xiàn)場(chǎng)轉(zhuǎn)儲(chǔ)(筆者注:由于Win32各個(gè)平臺(tái)下,默認(rèn)調(diào)試報(bào)錯(cuò)工具常不一致、還受安裝的調(diào)試軟件影響,所以實(shí)踐中,推薦用自定義的未捕獲SEH異常處理函數(shù)替換系統(tǒng)標(biāo)準(zhǔn)處理過(guò)程,更可靠實(shí)現(xiàn)錯(cuò)誤現(xiàn)場(chǎng)轉(zhuǎn)儲(chǔ))。

            C運(yùn)行庫(kù)事件:指abort調(diào)用、運(yùn)行時(shí)安全檢查(堆棧溢出)、_invalid_parameter錯(cuò)誤。同樣它們不屬于C++異常的范疇,一旦出現(xiàn),也立即終止程序。VC2005 C運(yùn)行庫(kù)將其直接拋給系統(tǒng)級(jí)的未捕獲SEH異常處理函數(shù)來(lái)處理。(筆者注:可用_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT), signal(SIGABRT, ...), _set_invalid_parameter_handler,來(lái)截獲處理。而堆棧溢出,則需要截獲UnhandledExceptionFilter來(lái)實(shí)現(xiàn))。

            標(biāo)準(zhǔn)C++庫(kù)事件:new、terminate、unexpected調(diào)用。這些事件默認(rèn)以SEH未捕獲異常的方式處理。

            SEH異常:SEH異常包括了上述的底層事件。SEH異常機(jī)制不釋放局部對(duì)象,因此只推薦用于對(duì)底層異常機(jī)制的包裝。

            C++異常:按照C++異常被看成了一種錯(cuò)誤處理機(jī)制,因此,它并不把底層事件看作異常,而只把throw視為異常,即C++異常機(jī)制只直接捕獲軟件異常,硬件異常需要間接捕獲。理解這一點(diǎn),將有助于我們真正理解C++異常是一種軟件手段,而不是保護(hù)程序的萬(wàn)能靈藥。C++異常會(huì)自動(dòng)釋放局部對(duì)象,這使得C++異常真正具有了資源安全性,當(dāng)然前提是,使用局部對(duì)象自動(dòng)釋放的機(jī)制來(lái)保護(hù)資源分配。C++異常是應(yīng)用層開(kāi)發(fā)中錯(cuò)誤處理的重要工具,這一點(diǎn)顯然還未得到足夠的重視,當(dāng)然這是由于設(shè)計(jì)、使用C++異常都需要全新的思維觀和設(shè)計(jì)技巧。

            附:同步異常與異步異常
            1) VC的C++ Exception 采用兩種模式捕獲異常:同步模式和異步模式。VC的工程的調(diào)試版本缺省使用異步模式,工程的發(fā)布版本缺省使用同步模式。在同步模式下,VC的編譯器假定代碼中只有在顯示使用throw和調(diào)用函數(shù)的時(shí)候才會(huì)引發(fā)異常,因此,在同步模式下,VC編譯出的代碼比較小,但在這種模式下,try-catch對(duì)不能捕獲內(nèi)存訪問(wèn)異常與算術(shù)除零異常等。在異步模式下,VC的編譯器為try塊內(nèi)的每一條語(yǔ)句生成異常捕獲代碼,在這種情況下,他能夠捕獲全部的異常,還能保證棧上對(duì)象在解棧中正確釋放。為了要在發(fā)行版本中也能夠捕獲全部異常就需要打開(kāi)異步模式,但代價(jià)是程序編譯出代碼變大,運(yùn)行速度變慢。
            2)編譯選項(xiàng):
            同步模式的編譯選項(xiàng)為/EHs或者/GX(等同于/EHsc)
            異步模式的編譯選項(xiàng)為/EHa

            posted on 2010-08-02 21:37 maxime 閱讀(714) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 設(shè)計(jì)方法 & 編程方法
            亚洲午夜久久久精品影院| 国内精品久久久久久麻豆| 久久婷婷五月综合97色| 东京热TOKYO综合久久精品| 国产精品天天影视久久综合网| 777久久精品一区二区三区无码| 久久成人永久免费播放| 亚洲va久久久噜噜噜久久| 国产精品美女久久久久av爽| 国产精品99久久久久久宅男小说| …久久精品99久久香蕉国产| 深夜久久AAAAA级毛片免费看| 久久亚洲AV成人无码国产| 久久99精品国产麻豆婷婷| 乱亲女H秽乱长久久久| 亚洲午夜精品久久久久久浪潮| www久久久天天com| 精品久久人人爽天天玩人人妻| 国产精品美女久久久网AV| 国产99精品久久| 久久婷婷五月综合97色一本一本| 久久精品极品盛宴观看| 精品久久久久久无码中文野结衣| 77777亚洲午夜久久多喷| 久久久精品国产免大香伊| 青青久久精品国产免费看| 国产午夜精品久久久久九九| 国产成人综合久久久久久| 国产精品久久精品| 久久人人爽人人爽人人片av高请| 久久久久久久免费视频| 亚洲Av无码国产情品久久| 久久本道久久综合伊人| 久久久国产精品| 美女久久久久久| 99久久这里只精品国产免费| 亚洲精品国产第一综合99久久 | 97久久国产露脸精品国产| 久久频这里精品99香蕉久| 欧美日韩精品久久久免费观看| 久久99精品久久久大学生|