사용자 도구

사이트 도구


kb:csharpdebugging

C# Debugging

.NET 환경에서의 디버깅

예외 발생시 콜스택 파일에다 기록하기

WinForms 애플리케이션의 경우에는 Application.ThreadException 핸들러를 지정해주면 되고, 콘솔 애플리케이션의 경우에는 AppDomain.CurrentDomain.UnhandledException 핸들러를 지정해주면 된다.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace YourNameSpace
{
    class DebugHelper
    {
        public static void InstallExceptionHandler()
        {
            Application.ThreadException +=
                new ThreadExceptionEventHandler(ThreadExceptionHandler);
 
            AppDomain.CurrentDomain.UnhandledException +=
                new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
        }
 
        private static void ThreadExceptionHandler(object sender, ThreadExceptionEventArgs args)
        {
            HandleException((Exception)args.Exception);
        }
 
        private static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
        {
            HandleException((Exception)args.ExceptionObject);
        }
 
        private static void HandleException(Exception e)
        {
            // unmanaged exception인 경우 e가 null로 넘어온다.
            // 처리해야 하는데... 귀찮다.
            StreamWriter file = new System.IO.StreamWriter(
                Application.StartupPath + "\\error.log",
                false,
                System.Text.Encoding.Default
                );
 
            file.WriteLine(e.StackTrace);
            file.Close();
 
            MessageBox.Show(
                "A fatal problem has occurred.\n" + e.Message + "\nin: " + e.GetType(),
                "Program Stopped",
                MessageBoxButtons.OK,
                MessageBoxIcon.Stop,
                MessageBoxDefaultButton.Button1);
 
            Trace.Close();
            Process.GetCurrentProcess().Kill();
        }
    }
}

프로그램 초기화 하는 부분 어딘가에서 InstallExceptionHandler 호출해 준다.

DebugHelper.InstallExceptionHandler();

링크

kb/csharpdebugging.txt · 마지막으로 수정됨: 2014/11/07 16:23 (바깥 편집)