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

UnobservedTaskException.jpg

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;

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

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

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

但通常幫助不大,已經無法釐清和解決問題

arrow
arrow
    文章標籤
    程式設計 C#
    全站熱搜
    創作者介紹
    創作者 Yang 的頭像
    Yang

    GNAySolution

    Yang 發表在 痞客邦 留言(0) 人氣()