ETH官方钱包

前往
大廳
主題

處理C#錯誤的最後掙扎

Yang | 2023-01-14 13:18:33 | 巴幣 0 | 人氣 322

有時是自己沒做好例外處理,有時是引用的第三方套件出意外,在此紀錄幾個處理和查找錯誤的最後手段

TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;

//Task沒正常結束,沒try-catch,例外就會被TaskScheduler.UnobservedTaskException捕捉
void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
    e.SetObserved(); //否則會結束程序

    if (e.Exception != null)
    {
        //Do something.

        if (e.Exception.InnerExceptions != null)
        {
            foreach (Exception ex in e.Exception.InnerExceptions)
            {
                //Do something.
            }
        }
    }
}

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

//應用程式掛掉才可能觸發,除了紀錄log也沒其他事可做
//有可能在處理例外時引發其他例外,要小心
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    if (e.ExceptionObject is Exception ex)
    {
        //Do something.
    }
}

第三方套件如果不是.net寫的(譬如可能是C/C++寫的dll),以上方法很可能都無法捕捉例外,此時只剩最後一招,

Windows系統管理工具-->事件檢視器,去查OS的錯誤紀錄,

但通常幫助不大,已經無法釐清和解決問題
送禮物贊助創作者 !
0
留言

創作回應

更多創作