第二十章 異常和狀態管理

2022-02-06 09:42:20 字數 1716 閱讀 5094

try中包含的**通長包含需要清理資源的**,或者從異常中恢復,或者會丟擲異常的**.

catch包含異常恢復的**

finally包含資源清理的**.保證會執行的**

如果內部的乙個catch沒有捕獲到異常,那麼會向外層就是呼叫方法的那一層查詢捕獲的**,總是先執行內部所有的finally語句,由內而外,最後執行catch的語句,再執行這個catch下邊的finally.處理完之後,**會從捕獲異常的**往下執行,不會再回到[丟擲異常的**那裡往下執行了.直到找到,如果找不到就丟擲未處理異常.

異常堆疊資訊包含的是最新的丟擲異常的起點,之前的異常資訊起點會被覆蓋掉.

要獲得從執行緒起始處到異常處理之間的完整堆疊跟蹤,需要使用system.diagnostics.stacktrace表示乙個堆疊跟蹤,它是乙個或多個堆疊幀的有序集合。

如果clr找到了pdb檔案,會包含源**檔案路徑和行號等資訊.

如果呼叫堆疊的時候發現沒有呼叫**中的一些方法,原因可能是:

jit編譯器內聯了一些方法.避免呼叫方法的開銷./debug命令,就是告訴編譯器不要內聯方法.

善用finally :lock using foreach(列舉器)都會自動加上finally語句塊.

不要什麼都捕捉:不要默默的catch掉exception型別的異常,會影響上次捕獲並處理異常.可以捕獲並重新丟擲乙個.不過是會改變異常的堆疊資訊的.

得體的從異常中恢復:如果能預見到異常的型別,可以捕獲該型別的異常,並繼續進行處理.使程式繼續執行.例如,捕獲0作為除數,就給使用者提示資訊.

回滾操作:對已經執行的操作進行恢復回滾.

可以再捕獲到的異常的data中加入鍵值對的資料,重新丟擲原異常.

clr檢測到程序中任何乙個執行緒出現未處理的異常,就會終止程序.

應用程式發生未處理的異常時,window會向事件日誌寫一條記錄,:開啟:」事件檢視器」->windows日誌->應用程式.

還可以通過操作中心:控制面板\所有控制面板項\操作中心\可靠性監視程式

除錯->異常中包含了vs能識別的不同種類的異常.

可以新增自己自定義的異常到這個表中.

引發被勾選時,表示如果發生此異常,會直接中斷,而不去查詢catch語句.方便直接找到這種異常.

不夠選的話,會在這個異常找不到catch語句的時候中斷.預設情況下不勾選.

system.runtime.compilerservices.runtimehelpers.prepareconstrainedregions將**體指定為受約束的執行區域 (cer).強迫trycatchfinally中的**提前編譯,提前丟擲異常.

這些區域中的**要新增屬性reliabilitycontractattribute : attribute定義某些**的作者和依賴於這些**的開發人員之間的可靠性協定.

如果這些方法沒有準備好,就是發生異常了,就會在執行try**前丟擲.

**契約的核心靜態類是:system.diagnostics.contracts.contract

第二十章 Skeletal Animation

skeletal animation 骨骼動畫 是指互相連線的變換 骨頭 組成的分層集合,以及對應的模型mesh 即骨骼的 當這些變換隨著時間變化而變化時,模型的mesh就會形成動畫效果。本章,我們將會 skeketal animation,並開發一些系統用於支援模型動畫。把乙個skeleton對映...

第二十章 限制

城城內西部某個庭院井底,滕青山正在這。趙丹塵,你想抓我,再回去練上五十年吧。喊了一嗓子後,滕青山又立即鑽進泥土中,繼續前進。泥土中,滕青山現在也不急,不過,此刻滕青山體表的 子彈型光罩 已經沒有螺旋了。通過先天真元,改變身體形狀!看來不是我想象的那樣。滕青山很清楚,先天真元光罩如果單單維持,消耗先天...

第二十章 配置ftp服務

什麼是ftp 也許你對 ftp不陌生,但是你是否了解 ftp到底是個什麼玩意?ftp 是file transfer protocol 檔案傳輸協議 的英文簡稱,而中文簡稱為 文傳協議 用於 internet 上的控制檔案的雙向傳輸。同時,它也是乙個應用程式 使用者可以通過它把自己的 pc機與世界各地...