• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              1 Posts :: 9 Stories :: 1 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新評論

            • 1.?re: 軟件運行日志[未登錄]
            • 我覺得調試日志不應該只記錄軟件的非正常過程吧,而是記錄軟件的運行過程。期間有不正常的時候用warning,error和fetal來記錄。
            • --hi

            錯誤一詞,在軟件開發中,概念已經非常泛濫,本文中暫時指,軟件中的一切非正常現象和事件。

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

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

            標準C++庫事件:new、terminate、unexpected調用。這些事件默認以SEH未捕獲異常的方式處理。

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

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

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

            posted on 2010-08-02 21:37 maxime 閱讀(702) 評論(0)  編輯 收藏 引用 所屬分類: 設計方法 & 編程方法
            思思久久好好热精品国产| 国产午夜免费高清久久影院| 亚洲香蕉网久久综合影视| 久久久久久精品成人免费图片| 国产69精品久久久久9999APGF| 久久精品无码一区二区无码| 亚洲国产精品久久久久婷婷软件 | 漂亮人妻被黑人久久精品| 久久久噜噜噜久久熟女AA片| 久久精品国产久精国产| 亚洲精品国产综合久久一线| 国产精品一久久香蕉国产线看观看| 久久99精品久久久久久齐齐 | 久久婷婷五月综合国产尤物app| 久久精品99久久香蕉国产色戒| 久久综合九色综合久99| 狠狠色丁香婷综合久久| 综合久久精品色| 久久久99精品成人片中文字幕| 久久久久亚洲AV片无码下载蜜桃| 久久久久婷婷| 99久久婷婷国产综合精品草原| 日韩人妻无码一区二区三区久久| 国产L精品国产亚洲区久久| 天天爽天天狠久久久综合麻豆| 麻豆久久| 亚洲婷婷国产精品电影人久久| 亚洲狠狠久久综合一区77777| 无码人妻少妇久久中文字幕蜜桃| 亚洲精品第一综合99久久| 久久亚洲国产精品五月天婷| 99久久精品九九亚洲精品| 精品国产一区二区三区久久| 亚洲精品乱码久久久久久按摩| 亚洲国产视频久久| 久久久无码精品亚洲日韩京东传媒 | 久久精品国产亚洲AV影院| 亚洲欧洲久久av| 亚洲国产成人精品女人久久久| 久久99精品久久久久久野外| 久久久国产精华液|