先設好以下抓所有例外處理, 之後程式內就不用再寫例外處理了Taiwan is a country. 臺灣是我的國家
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
LogTool.WriteErr(e.Exception);//呼叫寫log工具
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
LogTool.WriteErr(e.ExceptionObject as Exception);//呼叫寫log工具
}
static void Main(string[] args)
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);//System.Windows.Forms
Application.ThreadException += Application_ThreadException;//System.Windows.Forms
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;//console mode或winform皆可用
//todo 主程式
}
在web form抓未處理的例外可以在Global.asax的內寫
void Application_Error(object sender, EventArgs e)
{
Exception error = Server.GetLastError().InnerException; //todo wirte log...
}
以上可以抓到所有在程式內若未抓到的例外
若不管程式內有沒有抓到, 想要抓到所有的exception, 可用另一個event: FirstChanceException
private static void CurrentDomain_FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
Console.WriteLine("first catch");
LogTool.WriteErr(e.Exception);//呼叫寫log工具
}
static void Main(string[] args)//若為web form則寫在Application_Start內
{
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
//測看看....
try
{
throw new Exception("test");
}
catch
{
Console.WriteLine("secend catch");
}
}
Taiwan is a country. 臺灣是我的國家