1. 程式人生 > >C#之系統異常處理機制

C#之系統異常處理機制

在系統開發過程中,BUG和異常產生是無處不在的,但是需要我們去做的就是不斷去發掘異常、修改異常。

這篇文章主要談談我在系統中解決異常的幾種方法:

1.控制檯程式產生的異常;

在大多數的控制檯程式中,運用最多的就是

try{
  Action();   捕捉異常
}
catch(Exption e){
  
}

但是需要注意的就是在控制檯執行中產生的執行緒和一些特殊異常try捕捉不到,就只有需要使用特定的方法進行捕捉和處理

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException)

2.web產生異常;

現在的web系統,分為webFrom和MVC。

webFrom也可以2種方式捕捉異常,一種採用上述的

try{
  Action();   捕捉異常
}
catch(Exption e){
  
}

第二種就是重寫全域性方法進行捕捉進行處理

public class Global : System.Web.HttpApplication
{
  //處理
  public
void Application_Error(object sender, EventArgs e) { } }

MVC處理的方式就是更加多樣,不但可以用上述2種進行處理

還可以重寫父類控制器方法捕捉異常進行處理

protected virtual void OnException(ExceptionContext filterContext);

還有就是MVC最新的IOC思想,新增一個Filter進行異常捕捉進行處理

public class ExceptionHandleFilter : ExceptionFilterAttribute
    {
        /// <summary>
/// 系統發生異常時執行 /// </summary> /// <param name="actionExecutedContext"></param> public override void OnException(HttpActionExecutedContext actionExecutedContext) { Action() //處理異常 } } //運用 [ExceptionHandleFilter] public class ServiceForAppController : BaseApiController { }

3.介面異常;

介面的處理方式同web處理方式類似,但是需要注意的就是在提供介面的時候最好能夠新增一個回撥機制,便於反饋解決呼叫端是否出現調用出現的異常。

4.守護系統如何監控其他系統的異常;

1.這種異常主要運用於守護程式中使用,就是A程式監控B/C程式的執行情況,這種也有2種方式進行處理

第一種方法(推薦)

採用應用程式之間的通訊通道進行.B/C生成出異常,就直接交於中間的佇列進行處理,然後消費者從佇列中取出資料進行後續處理,比如

RabbitMQ
MSMQ

第二種方法

呼叫windos系統自帶的WIND32介面獲取程式執行的控制代碼指標,判斷其執行狀態進行後續處理。

上述方法只是個人在工作中運用比較多的一些捕捉機制,然後搭配現在比較成熟的日誌元件進行處理,更加方便高效。

Log4
NLog

相關推薦

C#系統異常處理機制

在系統開發過程中,BUG和異常產生是無處不在的,但是需要我們去做的就是不斷去發掘異常、修改異常。 這篇文章主要談談我在系統中解決異常的幾種方法: 1.控制檯程式產生的異常; 在大多數的控制檯程式中,運用最多的就是 try{ Action(); 捕捉異常 } cat

實現C語言的異常處理機制 Implementing Exceptions in C

網上衝浪時發現一個很有意思的文獻——《Implementing Exceptions in C》,雖然十分古老(1989),但對C語言這種幾乎不變的語言來說不存在知識過時的問題。文中講了怎麼在純C語言中實現類似C++異常處理機制的方法,並提供了庫原始碼,讓人眼前

簡記cc++、java異常處理機制的區別

一、C異常處理:用於多層返回的setjmp/longjmp機制 C中的異常處理是通過setjmp.h標頭檔案中定義的巨集setjmp和巨集longjmp實現的。 類似於退棧,setjmp/longjmp機制的使用方法: 在希望進行錯誤處理的位置用setjmp巨集進行標註 

《Visual C++異常處理機制原理與應用(二)—— C/C++結構化異常處理try-finally終止處理的使用與原理(下)》

在上一篇文章中,我們其實只分析了終止型異常處理程式中正常的執行流程,這種情況的出現其實需要作如下假設: __try塊中的程式碼執行過程中不會引發異常 這部分程式碼不會試圖提前離開__try塊的作用範圍(如包含goto、break、continue、retur

C語言中的異常處理機制

軟件測試 如何實現 char* oar 朋友 核心 初始化 flag out #define try if(!setjmp(Jump_Buffer)) 返回try現場後重新執行判斷,所以有兩次執行。 http://blog.csdn.net/tian_dao_chou_q

C#進階--WebApi異常處理機制

str with 分配 客戶 來看 stack 統一 releases 全局配置 其實對於C#異常處理大家都不陌生,但是對於在WeiApi上的異常處理實際上也和傳統異常處理區別不大,但是卻經過封裝可以讓異常更加友好,https://docs

Python 異常處理機制

python在程式執行出現錯誤時時有相應的反應機制 ,我們可以針對不同的錯誤做出不同的響應 1 list1 = ['a','b','c'] 2 print(list1[4]) #>>>IndexError: list index out of range 3 a =

異常簡述(一):C語言中的異常處理機制

  人的一生會遇到很多大起大落,尤其是程式設計師.   程式設計師寫好的程式,論其消亡形式無非三種:無疾而終、自殺、他殺.   當然作為一名程式設計師,最樂意看到自己寫的程式能夠無疾而終,因此儘快的學習異常處理機制是非常重要的!   使自己的程式在遇到錯誤時能夠克服錯誤,更健壯,而不是遇到錯誤就憤憤自殺.  

Spring MVC 解析 DispatcherServlet異常處理機制HandlerExceptionResolver

springMVC對Controller執行過程中出現的異常提供了統一的處理機制,其實這種處理機制也簡單,只要丟擲的異常在DispatcherServlet中都會進行捕獲,這樣就可以統一的對異常進行處理。 springMVC提供了一個HandlerExcepti

Ruby學習異常處理機制

異常和執行總是被聯絡在一起,假如我們要開啟一個不存在的檔案,但是沒有處理這種情況,那麼,程式執行的後果就可想而知了,很明顯,程式停止執行。而異常就是用於處理各種型別的錯誤,這些錯誤可能在程式執行期間發生,所以要採取適當的行動,而不至於讓程式完全停止。Ruby有一套非常完善的處理異常的機制,就是我

C#解決 未處理的“System.InvalidOperationException”型別的異常出現在 System.dll中...

今天在寫一個C#埠掃描器,執行程式時,出現了以下的錯誤提示資訊:未處理的“System.InvalidOperationException”型別的異常出現在 System.dll 中。 其他資訊: 斷開套接字連線後,只能通過非同步方式再次重新連線, 而且只能連線到不同的 E

JAVA學習 異常處理機制

   今天就來說說java的異常處理機制,異常處理不是第一接觸,尤其是寫過很多c#的程式碼,基本都會寫到異常處理的程式碼,其實c#的異常處理與java的異常處理基本都是一樣的,只是在一些細節上不是很一樣。今天就來說說關於Java的異常處理機制。 一、為什麼需要 1、原因很簡

C++中讀寫檔案過程中異常處理機制

        在利用C++進行檔案讀取與寫入過程中,無論是針對二進位制檔案還是文字檔案均需要進行異常處理,在C++中我們可以利用CFile進行檔案的讀寫,而在MFC中還可以利用CStdioFile進行檔案的讀寫。         利用CFile進行讀文字檔案過程中的異常處

玩轉python爬蟲URLError異常處理

bsp 無法識別 pac 使用 cin lai 網絡 處理方式 地址 這篇文章主要介紹了python爬蟲的URLError異常處理,詳細探尋一下URL\HTTP異常處理的相關內容,通過一些具體的實例來分析一下,非常的簡單,但是卻很實用,感興趣的小夥伴們可以參考一下 本節

Python基礎finally異常處理

不知道 發生 try range 異常處理 輸出 完全 例如 nbsp #try...finally 無論是否異常都執行finally#例如實現不管是否異常都輸出一串字符串‘‘‘try: print ifinally: print "不管上面是否異常,我必須輸出

七、異常處理——2-異常處理機制

left ron text pan 異常處理機制 異常類 捕獲異常 p s 捕獲 2-異常處理機制 1.使用try...catch捕獲異常 2.異常類的繼承體系七、異常處理——2-異常處理機制

requests庫請求異常處理

git pri name requests poi mail esp ons https 利用requests發出請求時可能會發生異常,requests中有一個exception庫用來區分這些異常。 http協議是基於tcp/ip協議的,tcp/ip三次握手,因此可以在請求

java中異常處理機制 throw拋出自定義業務邏輯異常 throws繼續拋出 catch捕獲後會自動繼續拋向調用方法

異常處理機制 ... cep super finally sta exc ace 避免 package com.swift; public class Exception_TestC { public static void main(String[] arg

Java中的異常處理機制

條件 order 什麽是 浪費 sun color 越界 details 區域 基本框架如下Java中的異常處理機制只要實現自Throwable接口,繼承關系如下: 如上圖可以看出這個機制的處理對象主要分為兩種:主要區別error 表示恢復不是不可能但很困難的情況下的

PHP的異常處理機制

狀況 出錯 階段 異常處理機制 們的 註冊 ... 方式 沒有 1、PHP中異常的獨特性   PHP中的異常的獨特性,即PHP中的異常不同於主流語言C++、java中的異常。在Java中,異常是唯一的錯誤報告方式,而在PHP中卻不是這樣,而是把所有不正常的情況都視作了錯誤進