搜尋

首頁  >  問答  >  主體

關於c++的異常?

  1. 平常debug出的exception(如圖)和人為試圖判斷使用者輸入對錯的try throw異常有什麼本質區別嗎? 或者說平常談及c 的異常機制是不是包括前者,還是只是單純的指後者?

#上面提到的第一種異常是由什麼來判斷的, 例如圖裡的accedd violation, 是編譯器進行的判斷還是ide的其他工具?

给我你的怀抱给我你的怀抱2735 天前1162

全部回覆(3)我來回復

  • phpcn_u1582

    phpcn_u15822017-06-30 09:59:21

    @依雲 說的有道理,我做補充

    • c++的異常只能捕獲由c++拋出的異常。簡單來說,即它只能catch它自己(不限於你寫的程式碼,還包括運行庫)throw的異常。

    • 實際上c++拋出的異常並不算真正的異常,因為他只是被定義的,可預測的。真正的異常只有執行過後才被cpu觸發,也就是硬體拋出的例外。

    • 硬體不會直接理會c++,它會交給作業系統去處理。鑑於作業系統的不同,對異常的處理也是不一致的————但他們都不會交給上層語言。

    • 以相對完善的windows異常處理為例,它會

    1. 交給調試器(進程必須被調試)

    2. 執行VEH

    3. 執行SEH

    4. TopLevelEH(進程被調試時不會被執行)

    5. 交給調試器(上面的異常處理都說處理不了,就再次交給調試器)

    6. 呼叫異常埠通知csrss.exe

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-30 09:59:21

    記憶體讀取違例,是由硬體判斷,然後交由作業系統處理的。 (我不太懂 C++,不過這不像是 C++ 的異常,而是 Windows 拋出的異常。)

    回覆
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:21

    沒有get到你的點,有些庫裡就自帶的異常類,也可以自訂異常類,最後都繼承自std::exception,本質上沒啥區別。還有就是這個是執行時期的異常,跟編譯器還有ide無關。

    回覆
    0
  • 取消回覆