In C# how to collect stack trace of program crash

.net, c#, error-handling, winforms

Solution

To catch all unhandled exceptions, Add this to program.cs:

    [STAThread]
    static void Main()
    {
    AppDomain currentDomain = default(AppDomain);
    currentDomain = AppDomain.CurrentDomain;
    // Handler for unhandled exceptions.
    currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
    // Handler for exceptions in threads behind forms.
    System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;
    ...
    }

private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
   Exception ex = default(Exception);
   ex = (Exception)e.ExceptionObject;
   ILog log = LogManager.GetLogger(typeof(Program));
   log.Error(ex.Message + "\n" + ex.StackTrace);
}

private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
   Exception ex = default(Exception);
   ex = e.Exception;
   ILog log = LogManager.GetLogger(typeof(Program)); //Log4NET
   log.Error(ex.Message + "\n" + ex.StackTrace);
}

Stack trace you can get by exception.StackTrace

Problem

I am new to C#. I am writing a small desktop form based application and I need to have this feature in the app. If the application crashes at any time, there should be a last opportunity for the app to collect stack trace and send it back to me... Please give me directions on this. Do I need a try catch covering the main the entry point of my app ?? or what is the best way to handle such things in a C# app. thank you,

Original source