160516 닷넷 어플리케이션 디버깅

Edit

간략요약

닷넷 어플리케이션 디버깅의 실용적이며 다양한 디버깅 방법에 대해서 서술한다.
  • 전역 예외처리
    • 가장 일반적인 예외처리
    • 사후 디버깅으로 주로 사용됨
    • 주로 예외처리 루틴에서 콜스텍정보만 텍스트로 로그서버에 업로드하여 분석함.
    • 콜스텍 정보 정도면 80~90% 정도 오류상황의 원인을 분석할 수 있음.
    • 하지만 정확한 변수값을 파악할 수 없는 한계가 있음.
  • 실행중 VS디버거 접합
    • 개발PC(혹은 원격디버깅환경이 셋팅된PC)에 VS디버거를 연결하여 정지점 기반으로 디버깅
    • 정지점 기반 디버깅이라 가장 기능이 강력함.
    • 하지만 사후디버깅이 가능하지 않고, 개발PC에 준하는 환경셋팅 노력이 요구됨.
  • 덤프파일 생성후 windbg로 분석하기
    • 실행중 혹은 크래시발생시 덤프파일 생성후 windbg로 디버깅.
    • 콜스텍정보, 메모리내용을 모두 확인할 수 있음.
    • windbg의 강력한 기능을 모두 사용할 수 있음.
    • windbg 명령어를 잘 알고 있어야 함.
    • windbg가 편리한 GUI를 제공하지 않음.
      • 디버깅은 visualization이 중요한데 이게 안되는 것은 큰 단점…
  • 덤프파일 생성후 VS디버거로 분석하기
    • 덤프파일 분석의 모든 장점을 똑같이 갖음.
    • VS디버거를 사용하기 때문에 어려운 명령어가 필요없고 편리한 GUI도 제공됨!




소스코드

예제 소스코드는 아래 링크에서 다운로드 받을수 있음.
https://github.com/HyundongHwang/DotNetDebugging




전역 예외처리

테스트를 위한 간단한 어플리케이션

  • AppDomain.CurrentDomain.UnhandledException 를 이용해서 전역예외처리를 함.
  • 지역변수, 전역변수를 할당하는 간단한 코드도 추가.
  • Q, D, E 키로 종료, 덤프파일생성, 예외 발생을 구현함.
    class Program
    {
        private static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += _AppDomain_UnhandledException;

            var p = new MyPerson();
            p.id = 101;
            p.name = "william";

            MySingleton.Current.id = 12345;
            MySingleton.Current.name = "william";
            MySingleton.Current.friends = new List<string> { "brandon", "kevin" };

            Console.WriteLine($@"
commands
----------------
q : exit program
d : create dump
e : create exception

enter command : 
            ");

            while (true)
            {
                var key = Console.ReadKey();

                if (key.Key == ConsoleKey.D)
                {
                    Console.WriteLine("create dump...");
                    MiniDumpWriter.Write();
                }
                else if (key.Key == ConsoleKey.Q)
                {
                    Console.WriteLine("exit program...");
                    break;
                }
                else if (key.Key == ConsoleKey.E)
                {
                    Console.WriteLine("create exception...");
                    throw new Exception("my exception is occured!!!");
                    break;
                }
            }
        }

        private static void _AppDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Console.WriteLine($@"e : {e}");
            Console.WriteLine($@"e.ExceptionObject : {e.ExceptionObject}");
        }
    }

    public class MyPerson
    {
        public int id { get; set; }
        public string name { get; set; }
    }

    public class MySingleton
    {
        public int id { get; set; }
        public string name { get; set; }
        public List<string> friends { get; set; }


        #region 싱글톤
        static MySingleton _Current;
        static public MySingleton Current
        {
            get
            {
                if (_Current == null)
                {
                    _Current = new MySingleton();
                }
                return _Current;
            }
        }
        MySingleton()
        {
        }
        #endregion
    }

예외발생시 예외정보, 콜스텍 출력(기존 닷넷 어플리케이션 디버깅)

  • 콜스텍 정보가 텍스트로 잘 출력됨!!!
  • 이정도로 오류상황을 분석하기에 충분하다면 아래에 기술되는 글들을 계속 읽을 필요는 없음.
commands
----------------
q : exit program
d : create dump
e : create exception

enter command :
e
create exception...

e : System.UnhandledExceptionEventArgs
e.ExceptionObject : System.Exception: my exception is occured!!!
   위치: MySimpleConApp.Program.Main(String[] args) 파일 C:\temp\MySimpleConApp\
Program.cs:줄 53




덤프파일 수동작성

  • 덤프파일을 가장하는 가장 간단한 방법으로 작업관리자를 열고 해당 프로세스를 찾아서 우클릭해서 덤프파일을 생성할 수 있음.
  • 작업관리자로 생성하는 덤프파일은 풀덤프파일이며 콜스텍정보, 변수값정보(=메모리정보)가 모두 포함된다.
  • 작업관리자 대신 ProcessExplorer를 이용하면 풀덤프 미니덤프 파일을 각각 생성할 수 있으며, 이때 미니덤프로는 콜스텍정보까지만 분석할 수 있다.
  • 물론 이때문에 풀덤프파일은 용량이 매우 크다.
  • 아주 작은 응용프로그램인데도 풀덤프파일은 97Mb나 된다.
PS C:\Users\Hyundong\AppData\Local\Temp> ls *.dmp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----     2016-05-16   오후 3:45       97156600 MySimpleConApp.DMP




windbg 설치

windbg를 통해서 덤프파일 로드, 분석

덤프파일 로드

PS C:\Users\Hyundong\AppData\Local\Temp> windbg -z .\MySimpleConApp.DMP

덤프파일 분석

  • windbg 로딩
  • MySimpleConApp.DMP 파일을 로딩함
  • User Mini Dump File with Full Memory 특성을 명시함.
Microsoft (R) Windows Debugger Version 10.0.10586.567 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\Hyundong\AppData\Local\Temp\MySimpleConApp.DMP]
User Mini Dump File with Full Memory: Only application data is available

Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 10586 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
Built by: 10.0.10586.0 (th2_release.151029-1700)
Machine Name:
Debug session time: Mon May 16 15:45:27.000 2016 (UTC + 9:00)
System Uptime: 0 days 5:39:46.399
Process Uptime: 0 days 0:04:06.000
........................................
Loading unloaded module list
.
ntdll!NtDeviceIoControlFile+0x14:
00007ffd`734351c4 c3              ret
0:000>
  • sos.dll clr.dll을 로드함.
  • windbg에서 닷넷어플리케이션 디버깅에 필요한 명령어들이 포함된 dll임.
  • .loadby sos clr
0:000> .loadby sos clr
  • 콜스텍정보를 출력함
  • 모든 디버깅은 콜스텍 정보를 출력하는 것부터 시작!
  • 닷넷디버깅
  • !clrstack -a
0:000> !clrstack -a
OS Thread Id: 0x1dc4 (0)
        Child SP               IP Call Site
0000003a9acfed28 00007ffd734351c4 [InlinedCallFrame: 0000003a9acfed28] Microsoft.Win32.Win32Native.ReadConsoleInput(IntPtr, InputRecord ByRef, Int32, Int32 ByRef)
0000003a9acfed28 00007ffd416893a1 [InlinedCallFrame: 0000003a9acfed28] Microsoft.Win32.Win32Native.ReadConsoleInput(IntPtr, InputRecord ByRef, Int32, Int32 ByRef)
0000003a9acfecf0 00007ffd416893a1 DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, InputRecord ByRef, Int32, Int32 ByRef)
    PARAMETERS:
        <no data>
        <no data>
        <no data>
        <no data>

0000003a9acfee00 00007ffd4177e8d9 System.Console.ReadKey(Boolean)
    PARAMETERS:
        intercept (0x0000003a9acfef08) = 0x0000000000000000
    LOCALS:
        <no data>
        <no data>
        <no data>
        <no data>
        <no data>
        0x0000003a9acfee40 = 0x000001963d847c98
        <no data>
        <no data>
        <no data>

0000003a9acfef00 00007ffce4f7063c *** WARNING: Unable to verify checksum for MySimpleConApp.exe
MySimpleConApp.Program.Main(System.String[]) [C:\project\160516_DotNetDebugging\MySimpleConApp\Program.cs @ 35]
    PARAMETERS:
        args (0x0000003a9acfefd0) = 0x000001963d8443f8
    LOCALS:
        0x0000003a9acfef68 = 0x000001963d844640
        0x0000003a9acfefa0 = 0x0000000000000000
        0x0000003a9acfef9c = 0x0000000000000000
        0x0000003a9acfef98 = 0x0000000000000000
        0x0000003a9acfef94 = 0x0000000000000000
        0x0000003a9acfef90 = 0x0000000000000001
0000003a9acff200 00007ffd445d4073 [GCFrame: 0000003a9acff200] 
  • 윗결과에서 Program.Main 함수의 로컬변수인 0x000001963d844640 를 클릭하면 오브젝트의 덤프를 출력할 수 있음.
  • 이 변수는 코드상의 var p = new MyPerson(); 변수임.
  • p.id = 101; 로 할당된 변수값을 확인할 수 있음.
  • !DumpObj /d 000001963d844640
0:000> !DumpObj /d 000001963d844640
Name:        MySimpleConApp.MyPerson
MethodTable: 00007ffce4e65b10
EEClass:     00007ffce4fb1068
Size:        32(0x20) bytes
File:        C:\project\160516_DotNetDebugging\MySimpleConApp\bin\Debug\MySimpleConApp.exe
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000001       10         System.Int32  1 instance              101 <id>k__BackingField
00007ffd41158538  4000002        8        System.String  0 instance 000001963d844410 <name>k__BackingField
  • p변수의 name의 값을 알아보기위해 000001963d844410 를 덤프시도
  • william 이라는 텍스트를 확인할 수 있음.
  • !DumpObj /d 000001963d844410
0:000> !DumpObj /d 000001963d844410
Name:        System.String
MethodTable: 00007ffd41158538
EEClass:     00007ffd40aa4ab8
Size:        40(0x28) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      william
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000243        8         System.Int32  1 instance                7 m_stringLength
00007ffd411596e8  4000244        c          System.Char  1 instance               77 m_firstChar
00007ffd41158538  4000248       80        System.String  0   shared           static Empty
                                 >> Domain:Value  000001963b9500e0:NotInit  <<
  • 이것외에도 무작정 힙에 할당된 모든 메모리의 값을 알고 싶다면…
  • 주소별로 정렬되고 타입별로 통계내어서 깔끔하게 출력된다.
  • 그렇지만 짧은 프로그램인데도 시스템 내부 변수 때문에 결과가 엄청 길다. ㅠㅠ;;
  • !dumpheap
0:000> !dumpheap
         Address               MT     Size
000001963d841000 000001963b9560a0       24 Free
000001963d841018 000001963b9560a0       24 Free
000001963d841030 000001963b9560a0       24 Free
000001963d841048 00007ffd41158768      160     
000001963d8410e8 00007ffd41158950      160     
000001963d841188 00007ffd411589c8      160     
000001963d841228 00007ffd41158a40      160     
...

Statistics:
              MT    Count    TotalSize Class Name
00007ffd4117a140        1           24 System.Reflection.Missing
00007ffd41179ff8        1           24 System.__Filters
00007ffd41179890        1           24 System.IntPtr
00007ffd4115fea0        1           24 System.Security.HostSecurityManager
...
Total 417 objects
  • 정적변수로 잡았던 MySingleton에 대한 값을 확인해 볼려고 함.
  • 일단 정적변수초기화에 대한 코드를 다시 한번보면
MySingleton.Current.id = 12345;
MySingleton.Current.name = "william";
MySingleton.Current.friends = new List<string> { "brandon", "kevin" };
  • MySingleton으로 타입을 지정해서 힙에서 변수를 덤프.
  • !dumpheap -type MySingleton
0:000> !dumpheap -type MySingleton
         Address               MT     Size
000001963d844660 00007ffce4e65c78       40     

Statistics:
              MT    Count    TotalSize Class Name
00007ffce4e65c78        1           40 MySimpleConApp.MySingleton
Total 1 objects
0:000> !DumpObj /d 000001963d844660
Name:        MySimpleConApp.MySingleton
MethodTable: 00007ffce4e65c78
EEClass:     00007ffce4fb10e0
Size:        40(0x28) bytes
File:        C:\project\160516_DotNetDebugging\MySimpleConApp\bin\Debug\MySimpleConApp.exe
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000003       18         System.Int32  1 instance            12345 <id>k__BackingField
00007ffd41158538  4000004        8        System.String  0 instance 000001963d844410 <name>k__BackingField
00007ffd40abd6c8  4000005       10 ...tring, mscorlib]]  0 instance 000001963d844688 <friends>k__BackingField
00007ffce4e65c78  4000006        8 ...onApp.MySingleton  0   static 000001963d844660 _Current
  • 일단 name 속성을 확인.
  • !DumpObj /d 000001963d844410
0:000> !DumpObj /d 000001963d844410
Name:        System.String
MethodTable: 00007ffd41158538
EEClass:     00007ffd40aa4ab8
Size:        40(0x28) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      william
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000243        8         System.Int32  1 instance                7 m_stringLength
00007ffd411596e8  4000244        c          System.Char  1 instance               77 m_firstChar
00007ffd41158538  4000248       80        System.String  0   shared           static Empty
                                 >> Domain:Value  000001963b9500e0:NotInit  <<
  • friends 는 List타입이기 때문에 몇단계를 거쳐야 한다.
  • 일단 friends를 덤프하고,
  • !DumpObj /d 000001963d844688
0:000> !DumpObj /d 000001963d844688
Name:        System.Collections.Generic.List`1[[System.String, mscorlib]]
MethodTable: 00007ffd40abd6c8
EEClass:     00007ffd40b6b310
Size:        40(0x28) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd41147288  4001820        8     System.__Canon[]  0 instance 000001963d8446c8 _items
00007ffd4115af60  4001821       18         System.Int32  1 instance                2 _size
00007ffd4115af60  4001822       1c         System.Int32  1 instance                2 _version
00007ffd41158b18  4001823       10        System.Object  0 instance 0000000000000000 _syncRoot
00007ffd41147288  4001824        0     System.__Canon[]  0   shared           static _emptyArray
                                 >> Domain:Value dynamic statics NYI 000001963b9500e0:NotInit  <<
  • 다시 _items를 덤프함.
  • _items를 덤프할때는 변수덤프가 아닌 배열덤프를 사용함.
  • !DumpArray /d 000001963d8446c8
0:000> !DumpArray /d 000001963d8446c8
Name:        System.String[]
MethodTable: 00007ffd41159880
EEClass:     00007ffd40b624a8
Size:        56(0x38) bytes
Array:       Rank 1, Number of elements 4, Type CLASS
Element Methodtable: 00007ffd41158538
[0] 000001963d844438
[1] 000001963d844460
[2] null
[3] null
  • 배열이 2개만 할당된것이 확인됨.
  • 이중 0번째 값을 덤프해보면 brandon이라는 값이 정확히 확인됨.
  • 이중 1번째 값을 덤프해보면 kevin이라는 값이 정확히 확인됨.
  • !DumpObj /d 000001963d844438
  • !DumpObj /d 000001963d844460
0:000> !DumpObj /d 000001963d844438
Name:        System.String
MethodTable: 00007ffd41158538
EEClass:     00007ffd40aa4ab8
Size:        40(0x28) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      brandon
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000243        8         System.Int32  1 instance                7 m_stringLength
00007ffd411596e8  4000244        c          System.Char  1 instance               62 m_firstChar
00007ffd41158538  4000248       80        System.String  0   shared           static Empty
                                 >> Domain:Value  000001963b9500e0:NotInit  <<
0:000> !DumpObj /d 000001963d844460
Name:        System.String
MethodTable: 00007ffd41158538
EEClass:     00007ffd40aa4ab8
Size:        36(0x24) bytes
File:        C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      kevin
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffd4115af60  4000243        8         System.Int32  1 instance                5 m_stringLength
00007ffd411596e8  4000244        c          System.Char  1 instance               6b m_firstChar
00007ffd41158538  4000248       80        System.String  0   shared           static Empty
                                 >> Domain:Value  000001963b9500e0:NotInit  <<




VS디버거에서 로드

  • windbg에 비하면 아주 아주 간단함!
  • 덤프파일을 VS디버거에서 오픈함
    • 그냥 비주얼스튜디오에서 dmp 파일열기
  • 로드된 덤프파일 경로, 덤프파일 생성시간, 프로세스 정보, OS정보 등 다양한 기초정보들을 수집할 수 있음.
  • Debug Managed Only 를 클릭하여 디버깅 시작
  • 스레드리스트 중에서 메인스레드를 찾고 펼쳐서 마지막 루틴인 Program.Main 함수를 클릭하여 이동
  • Program.Main 함수의 소스코드가 화면에 띄워짐
  • 소스코드에서 정지점에 노란색 화살표도 표시됨.
  • 정지점 기준으로 로컯변수 p와 MySingleton.Current 같은 정적변수에 접근하는 것도 가능함.




VS디버거 사용시 주의할 점

  • 분석대상 dmp파일을 발생시킨 어플리케이션의 pdb파일이 분석시 꼭 같은 디렉토리에 존재해야 함.
  • 역시 같은버전의 소스코드도 어디엔가는 존재해야 하는데, VS가 발견하지 못하면 소스코드 찾기 대화상자가 유도되므로 소스코드가 준비가 되어 있어야 함.
  • pdb파일버전은 dmp파일과 정확히 같아야 하지만, 소스코드는 분석대상 이외의 부분이 수정된것은 상관없음.
  • 실용적으로는 CBT, OBT등 본격 테스트에 앞서서 버전별로 pdb를 모아두어, 필요할때마다 연결해서 사용하는것이 좋겠음.




닷넷 어플리케이션 내에서 덤프파일 생성하기

  • 어플리케이션 크래시상황이나, 실행중이라도 특정시점에 즉시 덤프를 수행하는 방법이 필요할 때가 많음.
    • 크래시 이후 디버깅
    • 사용자환경에서 실행중 디버깅
    • 사용자환경개선 프로그램(?)
  • 당연히 덤프파일 생성기능이 API로 제공됨.
    • 아쉽게도 Win32 API이므로 pinvoke 사용해야 함.
namespace MySimpleConApp
{
    public static class MiniDumpWriter
    {
        [Flags]
        public enum MINIDUMP_TYPE
        {
            MiniDumpNormal = 0x00000000,
            MiniDumpWithDataSegs = 0x00000001,
            MiniDumpWithFullMemory = 0x00000002,
            MiniDumpWithHandleData = 0x00000004,
            MiniDumpFilterMemory = 0x00000008,
            MiniDumpScanMemory = 0x00000010,
            MiniDumpWithUnloadedModules = 0x00000020,
            MiniDumpWithIndirectlyReferencedMemory = 0x00000040,
            MiniDumpFilterModulePaths = 0x00000080,
            MiniDumpWithProcessThreadData = 0x00000100,
            MiniDumpWithPrivateReadWriteMemory = 0x00000200,
            MiniDumpWithoutOptionalData = 0x00000400,
            MiniDumpWithFullMemoryInfo = 0x00000800,
            MiniDumpWithThreadInfo = 0x00001000,
            MiniDumpWithCodeSegs = 0x00002000
        }

        [DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
        static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType, IntPtr expParam, IntPtr userStreamParam, IntPtr callbackParam);

        public static bool Write()
        {
            var currentProcess = Process.GetCurrentProcess();
            var currentProcessHandle = currentProcess.Handle;
            var currentProcessId = (uint)currentProcess.Id;

            {
                var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"{DateTime.Now.ToString("yyMMdd-HHmmss")}.mini.dmp");
                var options = MINIDUMP_TYPE.MiniDumpNormal;

                using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Write))
                {
                    MiniDumpWriteDump(currentProcessHandle, currentProcessId, fs.SafeFileHandle, (uint)options, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
                }
            }

            {
                var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"{DateTime.Now.ToString("yyMMdd-HHmmss")}.full.dmp");

                var options = 
                    MINIDUMP_TYPE.MiniDumpNormal |
                    MINIDUMP_TYPE.MiniDumpWithFullMemory |
                    MINIDUMP_TYPE.MiniDumpWithHandleData |
                    MINIDUMP_TYPE.MiniDumpWithProcessThreadData |
                    MINIDUMP_TYPE.MiniDumpWithThreadInfo; ;

                using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Write))
                {
                    MiniDumpWriteDump(currentProcessHandle, currentProcessId, fs.SafeFileHandle, (uint)options, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
                }
            }

            return true;
        }
    }
}
  • 이렇듯 dbghelp.dll의 MiniDumpWriteDump 함수를 사용하여 구현을 하는데 미니덤프와 풀덤프를 함께 만들도록 구현했음.
  • 상기 언급했듯 미니덤프는 콜스텍정보만, 풀덤프는 콜스텍과 메모리정보를 모두 포함함.
  • 사용하는 코드는 아래와 같음.
    • d를 클릭하면 수행하게 되어 있음.
if (key.Key == ConsoleKey.D)
{
    Console.WriteLine("create dump...");
    MiniDumpWriter.Write();
}




%23%20160516%20%uB2F7%uB137%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uB514%uBC84%uAE45%0A%0A@%28%uD669%uD604%uB3D9%20%uB178%uD2B8%uBD81%29%5B.net%2C%20c%23%2C%20debugging%2C%20study%2C%20windbg%5D%0A%0A%5Btoc%5D%0A%0A%23%23%20%uAC04%uB7B5%uC694%uC57D%0A%uB2F7%uB137%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uB514%uBC84%uAE45%uC758%20%uC2E4%uC6A9%uC801%uC774%uBA70%20%uB2E4%uC591%uD55C%20%uB514%uBC84%uAE45%20%uBC29%uBC95%uC5D0%20%uB300%uD574%uC11C%20%uC11C%uC220%uD55C%uB2E4.%0A%0A-%20%uC804%uC5ED%20%uC608%uC678%uCC98%uB9AC%0A%20%20%20%20-%20%uAC00%uC7A5%20%uC77C%uBC18%uC801%uC778%20%uC608%uC678%uCC98%uB9AC%0A%20%20%20%20-%20%uC0AC%uD6C4%20%uB514%uBC84%uAE45%uC73C%uB85C%20%uC8FC%uB85C%20%uC0AC%uC6A9%uB428%0A%20%20%20%20-%20%uC8FC%uB85C%20%uC608%uC678%uCC98%uB9AC%20%uB8E8%uD2F4%uC5D0%uC11C%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%uB9CC%20%uD14D%uC2A4%uD2B8%uB85C%20%uB85C%uADF8%uC11C%uBC84%uC5D0%20%uC5C5%uB85C%uB4DC%uD558%uC5EC%20%uBD84%uC11D%uD568.%0A%20%20%20%20-%20%uCF5C%uC2A4%uD14D%20%uC815%uBCF4%20%uC815%uB3C4%uBA74%2080%7E90%25%20%uC815%uB3C4%20%uC624%uB958%uC0C1%uD669%uC758%20%uC6D0%uC778%uC744%20%uBD84%uC11D%uD560%20%uC218%20%uC788%uC74C.%0A%20%20%20%20-%20%uD558%uC9C0%uB9CC%20%uC815%uD655%uD55C%20%uBCC0%uC218%uAC12%uC744%20%uD30C%uC545%uD560%20%uC218%20%uC5C6%uB294%20%uD55C%uACC4%uAC00%20%uC788%uC74C.%0A-%20%uC2E4%uD589%uC911%20VS%uB514%uBC84%uAC70%20%uC811%uD569%0A%20%20%20%20-%20%uAC1C%uBC1CPC%28%uD639%uC740%20%uC6D0%uACA9%uB514%uBC84%uAE45%uD658%uACBD%uC774%20%uC14B%uD305%uB41CPC%29%uC5D0%20VS%uB514%uBC84%uAC70%uB97C%20%uC5F0%uACB0%uD558%uC5EC%20%uC815%uC9C0%uC810%20%uAE30%uBC18%uC73C%uB85C%20%uB514%uBC84%uAE45%0A%20%20%20%20-%20%uC815%uC9C0%uC810%20%uAE30%uBC18%20%uB514%uBC84%uAE45%uC774%uB77C%20%uAC00%uC7A5%20%uAE30%uB2A5%uC774%20%uAC15%uB825%uD568.%0A%20%20%20%20-%20%uD558%uC9C0%uB9CC%20%uC0AC%uD6C4%uB514%uBC84%uAE45%uC774%20%uAC00%uB2A5%uD558%uC9C0%20%uC54A%uACE0%2C%20%uAC1C%uBC1CPC%uC5D0%20%uC900%uD558%uB294%20%uD658%uACBD%uC14B%uD305%20%uB178%uB825%uC774%20%uC694%uAD6C%uB428.%0A-%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uD6C4%20windbg%uB85C%20%uBD84%uC11D%uD558%uAE30%0A%20%20%20%20-%20%uC2E4%uD589%uC911%20%uD639%uC740%20%uD06C%uB798%uC2DC%uBC1C%uC0DD%uC2DC%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uD6C4%20windbg%uB85C%20%uB514%uBC84%uAE45.%0A%20%20%20%20-%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%2C%20%uBA54%uBAA8%uB9AC%uB0B4%uC6A9%uC744%20%uBAA8%uB450%20%uD655%uC778%uD560%20%uC218%20%uC788%uC74C.%0A%20%20%20%20-%20windbg%uC758%20%uAC15%uB825%uD55C%20%uAE30%uB2A5%uC744%20%uBAA8%uB450%20%uC0AC%uC6A9%uD560%20%uC218%20%uC788%uC74C.%0A%20%20%20%20-%20windbg%20%uBA85%uB839%uC5B4%uB97C%20%uC798%20%uC54C%uACE0%20%uC788%uC5B4%uC57C%20%uD568.%0A%20%20%20%20-%20windbg%uAC00%20%uD3B8%uB9AC%uD55C%20GUI%uB97C%20%uC81C%uACF5%uD558%uC9C0%20%uC54A%uC74C.%0A%20%20%20%20%20%20%20%20-%20%uB514%uBC84%uAE45%uC740%20visualization%uC774%20%uC911%uC694%uD55C%uB370%20%uC774%uAC8C%20%uC548%uB418%uB294%20%uAC83%uC740%20%uD070%20%uB2E8%uC810...%0A-%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uD6C4%20VS%uB514%uBC84%uAC70%uB85C%20%uBD84%uC11D%uD558%uAE30%0A%20%20%20%20-%20%uB364%uD504%uD30C%uC77C%20%uBD84%uC11D%uC758%20%uBAA8%uB4E0%20%uC7A5%uC810%uC744%20%uB611%uAC19%uC774%20%uAC16%uC74C.%0A%20%20%20%20-%20VS%uB514%uBC84%uAC70%uB97C%20%uC0AC%uC6A9%uD558%uAE30%20%uB54C%uBB38%uC5D0%20%uC5B4%uB824%uC6B4%20%uBA85%uB839%uC5B4%uAC00%20%uD544%uC694%uC5C6%uACE0%20%uD3B8%uB9AC%uD55C%20GUI%uB3C4%20%uC81C%uACF5%uB428%21%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uC18C%uC2A4%uCF54%uB4DC%0A%uC608%uC81C%20%uC18C%uC2A4%uCF54%uB4DC%uB294%20%uC544%uB798%20%uB9C1%uD06C%uC5D0%uC11C%20%uB2E4%uC6B4%uB85C%uB4DC%20%uBC1B%uC744%uC218%20%uC788%uC74C.%0Ahttps%3A//github.com/HyundongHwang/DotNetDebugging%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uC804%uC5ED%20%uC608%uC678%uCC98%uB9AC%0A%23%23%23%20%uD14C%uC2A4%uD2B8%uB97C%20%uC704%uD55C%20%uAC04%uB2E8%uD55C%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%0A-%20AppDomain.CurrentDomain.UnhandledException%20%uB97C%20%uC774%uC6A9%uD574%uC11C%20%uC804%uC5ED%uC608%uC678%uCC98%uB9AC%uB97C%20%uD568.%0A-%20%uC9C0%uC5ED%uBCC0%uC218%2C%20%uC804%uC5ED%uBCC0%uC218%uB97C%20%uD560%uB2F9%uD558%uB294%20%uAC04%uB2E8%uD55C%20%uCF54%uB4DC%uB3C4%20%uCD94%uAC00.%0A-%20Q%2C%20D%2C%20E%20%uD0A4%uB85C%20%uC885%uB8CC%2C%20%uB364%uD504%uD30C%uC77C%uC0DD%uC131%2C%20%uC608%uC678%20%uBC1C%uC0DD%uC744%20%uAD6C%uD604%uD568.%0A%0A%60%60%60csharp%0A%20%20%20%20class%20Program%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20private%20static%20void%20Main%28string%5B%5D%20args%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20AppDomain.CurrentDomain.UnhandledException%20+%3D%20_AppDomain_UnhandledException%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20p%20%3D%20new%20MyPerson%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20p.id%20%3D%20101%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20p.name%20%3D%20%22william%22%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20MySingleton.Current.id%20%3D%2012345%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20MySingleton.Current.name%20%3D%20%22william%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20MySingleton.Current.friends%20%3D%20new%20List%3Cstring%3E%20%7B%20%22brandon%22%2C%20%22kevin%22%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%24@%22%0Acommands%0A----------------%0Aq%20%3A%20exit%20program%0Ad%20%3A%20create%20dump%0Ae%20%3A%20create%20exception%0A%0Aenter%20command%20%3A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20%28true%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20key%20%3D%20Console.ReadKey%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28key.Key%20%3D%3D%20ConsoleKey.D%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%22create%20dump...%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWriter.Write%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28key.Key%20%3D%3D%20ConsoleKey.Q%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%22exit%20program...%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28key.Key%20%3D%3D%20ConsoleKey.E%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%22create%20exception...%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Exception%28%22my%20exception%20is%20occured%21%21%21%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20private%20static%20void%20_AppDomain_UnhandledException%28object%20sender%2C%20UnhandledExceptionEventArgs%20e%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%24@%22e%20%3A%20%7Be%7D%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Console.WriteLine%28%24@%22e.ExceptionObject%20%3A%20%7Be.ExceptionObject%7D%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20public%20class%20MyPerson%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20int%20id%20%7B%20get%3B%20set%3B%20%7D%0A%20%20%20%20%20%20%20%20public%20string%20name%20%7B%20get%3B%20set%3B%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20public%20class%20MySingleton%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20public%20int%20id%20%7B%20get%3B%20set%3B%20%7D%0A%20%20%20%20%20%20%20%20public%20string%20name%20%7B%20get%3B%20set%3B%20%7D%0A%20%20%20%20%20%20%20%20public%20List%3Cstring%3E%20friends%20%7B%20get%3B%20set%3B%20%7D%0A%0A%0A%20%20%20%20%20%20%20%20%23region%20%uC2F1%uAE00%uD1A4%0A%20%20%20%20%20%20%20%20static%20MySingleton%20_Current%3B%0A%20%20%20%20%20%20%20%20static%20public%20MySingleton%20Current%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20get%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_Current%20%3D%3D%20null%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_Current%20%3D%20new%20MySingleton%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20_Current%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20MySingleton%28%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%23endregion%0A%20%20%20%20%7D%0A%60%60%60%0A%0A%23%23%23%20%uC608%uC678%uBC1C%uC0DD%uC2DC%20%uC608%uC678%uC815%uBCF4%2C%20%uCF5C%uC2A4%uD14D%20%uCD9C%uB825%28%uAE30%uC874%20%uB2F7%uB137%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uB514%uBC84%uAE45%29%0A-%20%uCF5C%uC2A4%uD14D%20%uC815%uBCF4%uAC00%20%uD14D%uC2A4%uD2B8%uB85C%20%uC798%20%uCD9C%uB825%uB428%21%21%21%0A-%20%uC774%uC815%uB3C4%uB85C%20%uC624%uB958%uC0C1%uD669%uC744%20%uBD84%uC11D%uD558%uAE30%uC5D0%20%uCDA9%uBD84%uD558%uB2E4%uBA74%20%uC544%uB798%uC5D0%20%uAE30%uC220%uB418%uB294%20%uAE00%uB4E4%uC744%20%uACC4%uC18D%20%uC77D%uC744%20%uD544%uC694%uB294%20%uC5C6%uC74C.%0A%0A%60%60%60powershell%0Acommands%0A----------------%0Aq%20%3A%20exit%20program%0Ad%20%3A%20create%20dump%0Ae%20%3A%20create%20exception%0A%0Aenter%20command%20%3A%0Ae%0Acreate%20exception...%0A%0Ae%20%3A%20System.UnhandledExceptionEventArgs%0Ae.ExceptionObject%20%3A%20System.Exception%3A%20my%20exception%20is%20occured%21%21%21%0A%20%20%20%uC704%uCE58%3A%20MySimpleConApp.Program.Main%28String%5B%5D%20args%29%20%uD30C%uC77C%20C%3A%5Ctemp%5CMySimpleConApp%5C%0AProgram.cs%3A%uC904%2053%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20%uB364%uD504%uD30C%uC77C%20%uC218%uB3D9%uC791%uC131%0A-%20%uB364%uD504%uD30C%uC77C%uC744%20%uAC00%uC7A5%uD558%uB294%20%uAC00%uC7A5%20%uAC04%uB2E8%uD55C%20%uBC29%uBC95%uC73C%uB85C%20%uC791%uC5C5%uAD00%uB9AC%uC790%uB97C%20%uC5F4%uACE0%20%uD574%uB2F9%20%uD504%uB85C%uC138%uC2A4%uB97C%20%uCC3E%uC544%uC11C%20%uC6B0%uD074%uB9AD%uD574%uC11C%20%uB364%uD504%uD30C%uC77C%uC744%20%uC0DD%uC131%uD560%20%uC218%20%uC788%uC74C.%0A-%20%uC791%uC5C5%uAD00%uB9AC%uC790%uB85C%20%uC0DD%uC131%uD558%uB294%20%uB364%uD504%uD30C%uC77C%uC740%20%uD480%uB364%uD504%uD30C%uC77C%uC774%uBA70%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%2C%20%uBCC0%uC218%uAC12%uC815%uBCF4%28%3D%uBA54%uBAA8%uB9AC%uC815%uBCF4%29%uAC00%20%uBAA8%uB450%20%uD3EC%uD568%uB41C%uB2E4.%0A-%20%uC791%uC5C5%uAD00%uB9AC%uC790%20%uB300%uC2E0%20ProcessExplorer%uB97C%20%uC774%uC6A9%uD558%uBA74%20%uD480%uB364%uD504%20%uBBF8%uB2C8%uB364%uD504%20%uD30C%uC77C%uC744%20%uAC01%uAC01%20%uC0DD%uC131%uD560%20%uC218%20%uC788%uC73C%uBA70%2C%20%uC774%uB54C%20%uBBF8%uB2C8%uB364%uD504%uB85C%uB294%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%uAE4C%uC9C0%uB9CC%20%uBD84%uC11D%uD560%20%uC218%20%uC788%uB2E4.%0A-%20%uBB3C%uB860%20%uC774%uB54C%uBB38%uC5D0%20%uD480%uB364%uD504%uD30C%uC77C%uC740%20%uC6A9%uB7C9%uC774%20%uB9E4%uC6B0%20%uD06C%uB2E4.%0A%0A%21%5BAlt%20text%5D%28./1463382078028.png%29%0A%0A-%20%uC544%uC8FC%20%uC791%uC740%20%uC751%uC6A9%uD504%uB85C%uADF8%uB7A8%uC778%uB370%uB3C4%20%uD480%uB364%uD504%uD30C%uC77C%uC740%2097Mb%uB098%20%uB41C%uB2E4.%0A%20%0A%60%60%60powershell%0APS%20C%3A%5CUsers%5CHyundong%5CAppData%5CLocal%5CTemp%3E%20ls%20*.dmp%0A%0AMode%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20LastWriteTime%20%20%20%20%20%20%20%20%20Length%20Name%0A----%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-------------%20%20%20%20%20%20%20%20%20------%20----%0A-a----%20%20%20%20%202016-05-16%20%20%20%uC624%uD6C4%203%3A45%20%20%20%20%20%20%2097156600%20MySimpleConApp.DMP%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20windbg%20%uC124%uCE58%0A-%20%uB2E4%uC6B4%uB85C%uB4DC%20%uC0AC%uC774%uD2B8%20%3A%20https%3A//msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx%0A-%20WDK10%uC744%20%uC124%uCE58%uD560%uB54C%20%uD568%uAED8%20%uC124%uCE58%uB428.%0A-%20C%3A%5CProgram%20Files%20%28x86%29%5CWindows%20Kits%5C10%5CDebuggers%5Cx64%5Cwindbg.exe%0A%0A%23%23%20windbg%uB97C%20%uD1B5%uD574%uC11C%20%uB364%uD504%uD30C%uC77C%20%uB85C%uB4DC%2C%20%uBD84%uC11D%0A%23%23%23%20%uB364%uD504%uD30C%uC77C%20%uB85C%uB4DC%0A%0A%60%60%60powershell%0APS%20C%3A%5CUsers%5CHyundong%5CAppData%5CLocal%5CTemp%3E%20windbg%20-z%20.%5CMySimpleConApp.DMP%0A%60%60%60%0A%0A%23%23%23%20%uB364%uD504%uD30C%uC77C%20%uBD84%uC11D%0A-%20windbg%20%uB85C%uB529%0A-%20MySimpleConApp.DMP%20%uD30C%uC77C%uC744%20%uB85C%uB529%uD568%0A-%20User%20Mini%20Dump%20File%20with%20Full%20Memory%20%uD2B9%uC131%uC744%20%uBA85%uC2DC%uD568.%0A%0A%60%60%60powershell%0AMicrosoft%20%28R%29%20Windows%20Debugger%20Version%2010.0.10586.567%20AMD64%0ACopyright%20%28c%29%20Microsoft%20Corporation.%20All%20rights%20reserved.%0ALoading%20Dump%20File%20%5BC%3A%5CUsers%5CHyundong%5CAppData%5CLocal%5CTemp%5CMySimpleConApp.DMP%5D%0AUser%20Mini%20Dump%20File%20with%20Full%20Memory%3A%20Only%20application%20data%20is%20available%0A%0ASymbol%20search%20path%20is%3A%20srv*%0AExecutable%20search%20path%20is%3A%20%0AWindows%2010%20Version%2010586%20MP%20%284%20procs%29%20Free%20x64%0AProduct%3A%20WinNt%2C%20suite%3A%20SingleUserTS%0ABuilt%20by%3A%2010.0.10586.0%20%28th2_release.151029-1700%29%0AMachine%20Name%3A%0ADebug%20session%20time%3A%20Mon%20May%2016%2015%3A45%3A27.000%202016%20%28UTC%20+%209%3A00%29%0ASystem%20Uptime%3A%200%20days%205%3A39%3A46.399%0AProcess%20Uptime%3A%200%20days%200%3A04%3A06.000%0A........................................%0ALoading%20unloaded%20module%20list%0A.%0Antdll%21NtDeviceIoControlFile+0x14%3A%0A00007ffd%60734351c4%20c3%20%20%20%20%20%20%20%20%20%20%20%20%20%20ret%0A0%3A000%3E%0A%60%60%60%0A%0A-%20sos.dll%20clr.dll%uC744%20%uB85C%uB4DC%uD568.%0A-%20windbg%uC5D0%uC11C%20%uB2F7%uB137%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uB514%uBC84%uAE45%uC5D0%20%uD544%uC694%uD55C%20%uBA85%uB839%uC5B4%uB4E4%uC774%20%uD3EC%uD568%uB41C%20dll%uC784.%0A-%20%60.loadby%20sos%20clr%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20.loadby%20sos%20clr%0A%60%60%60%0A%0A-%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%uB97C%20%uCD9C%uB825%uD568%0A-%20%uBAA8%uB4E0%20%uB514%uBC84%uAE45%uC740%20%uCF5C%uC2A4%uD14D%20%uC815%uBCF4%uB97C%20%uCD9C%uB825%uD558%uB294%20%uAC83%uBD80%uD130%20%uC2DC%uC791%21%0A-%20%uB2F7%uB137%uB514%uBC84%uAE45%0A-%20%60%21clrstack%20-a%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21clrstack%20-a%0AOS%20Thread%20Id%3A%200x1dc4%20%280%29%0A%20%20%20%20%20%20%20%20Child%20SP%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20IP%20Call%20Site%0A0000003a9acfed28%2000007ffd734351c4%20%5BInlinedCallFrame%3A%200000003a9acfed28%5D%20Microsoft.Win32.Win32Native.ReadConsoleInput%28IntPtr%2C%20InputRecord%20ByRef%2C%20Int32%2C%20Int32%20ByRef%29%0A0000003a9acfed28%2000007ffd416893a1%20%5BInlinedCallFrame%3A%200000003a9acfed28%5D%20Microsoft.Win32.Win32Native.ReadConsoleInput%28IntPtr%2C%20InputRecord%20ByRef%2C%20Int32%2C%20Int32%20ByRef%29%0A0000003a9acfecf0%2000007ffd416893a1%20DomainNeutralILStubClass.IL_STUB_PInvoke%28IntPtr%2C%20InputRecord%20ByRef%2C%20Int32%2C%20Int32%20ByRef%29%0A%20%20%20%20PARAMETERS%3A%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%0A0000003a9acfee00%2000007ffd4177e8d9%20System.Console.ReadKey%28Boolean%29%0A%20%20%20%20PARAMETERS%3A%0A%20%20%20%20%20%20%20%20intercept%20%280x0000003a9acfef08%29%20%3D%200x0000000000000000%0A%20%20%20%20LOCALS%3A%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%200x0000003a9acfee40%20%3D%200x000001963d847c98%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%20%20%20%20%20%20%20%20%3Cno%20data%3E%0A%0A0000003a9acfef00%2000007ffce4f7063c%20***%20WARNING%3A%20Unable%20to%20verify%20checksum%20for%20MySimpleConApp.exe%0AMySimpleConApp.Program.Main%28System.String%5B%5D%29%20%5BC%3A%5Cproject%5C160516_DotNetDebugging%5CMySimpleConApp%5CProgram.cs%20@%2035%5D%0A%20%20%20%20PARAMETERS%3A%0A%20%20%20%20%20%20%20%20args%20%280x0000003a9acfefd0%29%20%3D%200x000001963d8443f8%0A%20%20%20%20LOCALS%3A%0A%20%20%20%20%20%20%20%200x0000003a9acfef68%20%3D%200x000001963d844640%0A%20%20%20%20%20%20%20%200x0000003a9acfefa0%20%3D%200x0000000000000000%0A%20%20%20%20%20%20%20%200x0000003a9acfef9c%20%3D%200x0000000000000000%0A%20%20%20%20%20%20%20%200x0000003a9acfef98%20%3D%200x0000000000000000%0A%20%20%20%20%20%20%20%200x0000003a9acfef94%20%3D%200x0000000000000000%0A%20%20%20%20%20%20%20%200x0000003a9acfef90%20%3D%200x0000000000000001%0A0000003a9acff200%2000007ffd445d4073%20%5BGCFrame%3A%200000003a9acff200%5D%20%0A%60%60%60%0A%0A-%20%uC717%uACB0%uACFC%uC5D0%uC11C%20Program.Main%20%uD568%uC218%uC758%20%uB85C%uCEEC%uBCC0%uC218%uC778%200x000001963d844640%20%uB97C%20%uD074%uB9AD%uD558%uBA74%20%uC624%uBE0C%uC81D%uD2B8%uC758%20%uB364%uD504%uB97C%20%uCD9C%uB825%uD560%20%uC218%20%uC788%uC74C.%0A-%20%uC774%20%uBCC0%uC218%uB294%20%uCF54%uB4DC%uC0C1%uC758%20var%20p%20%3D%20new%20MyPerson%28%29%3B%20%uBCC0%uC218%uC784.%0A-%20p.id%20%3D%20101%3B%20%uB85C%20%uD560%uB2F9%uB41C%20%uBCC0%uC218%uAC12%uC744%20%uD655%uC778%uD560%20%uC218%20%uC788%uC74C.%0A-%20%60%21DumpObj%20/d%20000001963d844640%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844640%0AName%3A%20%20%20%20%20%20%20%20MySimpleConApp.MyPerson%0AMethodTable%3A%2000007ffce4e65b10%0AEEClass%3A%20%20%20%20%2000007ffce4fb1068%0ASize%3A%20%20%20%20%20%20%20%2032%280x20%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5Cproject%5C160516_DotNetDebugging%5CMySimpleConApp%5Cbin%5CDebug%5CMySimpleConApp.exe%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000001%20%20%20%20%20%20%2010%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20101%20%3Cid%3Ek__BackingField%0A00007ffd41158538%20%204000002%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20System.String%20%200%20instance%20000001963d844410%20%3Cname%3Ek__BackingField%0A%60%60%60%0A%0A-%20p%uBCC0%uC218%uC758%20name%uC758%20%uAC12%uC744%20%uC54C%uC544%uBCF4%uAE30%uC704%uD574%20000001963d844410%20%uB97C%20%uB364%uD504%uC2DC%uB3C4%0A-%20william%20%uC774%uB77C%uB294%20%uD14D%uC2A4%uD2B8%uB97C%20%uD655%uC778%uD560%20%uC218%20%uC788%uC74C.%0A-%20%60%21DumpObj%20/d%20000001963d844410%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844410%0AName%3A%20%20%20%20%20%20%20%20System.String%0AMethodTable%3A%2000007ffd41158538%0AEEClass%3A%20%20%20%20%2000007ffd40aa4ab8%0ASize%3A%20%20%20%20%20%20%20%2040%280x28%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5CWINDOWS%5CMicrosoft.Net%5Cassembly%5CGAC_64%5Cmscorlib%5Cv4.0_4.0.0.0__b77a5c561934e089%5Cmscorlib.dll%0AString%3A%20%20%20%20%20%20william%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000243%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%207%20m_stringLength%0A00007ffd411596e8%20%204000244%20%20%20%20%20%20%20%20c%20%20%20%20%20%20%20%20%20%20System.Char%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2077%20m_firstChar%0A00007ffd41158538%20%204000248%20%20%20%20%20%20%2080%20%20%20%20%20%20%20%20System.String%20%200%20%20%20shared%20%20%20%20%20%20%20%20%20%20%20static%20Empty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%3E%20Domain%3AValue%20%20000001963b9500e0%3ANotInit%20%20%3C%3C%0A%60%60%60%0A%0A-%20%uC774%uAC83%uC678%uC5D0%uB3C4%20%uBB34%uC791%uC815%20%uD799%uC5D0%20%uD560%uB2F9%uB41C%20%uBAA8%uB4E0%20%uBA54%uBAA8%uB9AC%uC758%20%uAC12%uC744%20%uC54C%uACE0%20%uC2F6%uB2E4%uBA74...%0A-%20%uC8FC%uC18C%uBCC4%uB85C%20%uC815%uB82C%uB418%uACE0%20%uD0C0%uC785%uBCC4%uB85C%20%uD1B5%uACC4%uB0B4%uC5B4%uC11C%20%uAE54%uB054%uD558%uAC8C%20%uCD9C%uB825%uB41C%uB2E4.%0A-%20%uADF8%uB807%uC9C0%uB9CC%20%uC9E7%uC740%20%uD504%uB85C%uADF8%uB7A8%uC778%uB370%uB3C4%20%uC2DC%uC2A4%uD15C%20%uB0B4%uBD80%20%uBCC0%uC218%20%uB54C%uBB38%uC5D0%20%uACB0%uACFC%uAC00%20%uC5C4%uCCAD%20%uAE38%uB2E4.%20%u3160%u3160%3B%3B%0A-%20%60%21dumpheap%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21dumpheap%0A%20%20%20%20%20%20%20%20%20Address%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20%20Size%0A000001963d841000%20000001963b9560a0%20%20%20%20%20%20%2024%20Free%0A000001963d841018%20000001963b9560a0%20%20%20%20%20%20%2024%20Free%0A000001963d841030%20000001963b9560a0%20%20%20%20%20%20%2024%20Free%0A000001963d841048%2000007ffd41158768%20%20%20%20%20%20160%20%20%20%20%20%0A000001963d8410e8%2000007ffd41158950%20%20%20%20%20%20160%20%20%20%20%20%0A000001963d841188%2000007ffd411589c8%20%20%20%20%20%20160%20%20%20%20%20%0A000001963d841228%2000007ffd41158a40%20%20%20%20%20%20160%20%20%20%20%20%0A...%0A%0AStatistics%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Count%20%20%20%20TotalSize%20Class%20Name%0A00007ffd4117a140%20%20%20%20%20%20%20%201%20%20%20%20%20%20%20%20%20%20%2024%20System.Reflection.Missing%0A00007ffd41179ff8%20%20%20%20%20%20%20%201%20%20%20%20%20%20%20%20%20%20%2024%20System.__Filters%0A00007ffd41179890%20%20%20%20%20%20%20%201%20%20%20%20%20%20%20%20%20%20%2024%20System.IntPtr%0A00007ffd4115fea0%20%20%20%20%20%20%20%201%20%20%20%20%20%20%20%20%20%20%2024%20System.Security.HostSecurityManager%0A...%0ATotal%20417%20objects%0A%60%60%60%0A%0A-%20%uC815%uC801%uBCC0%uC218%uB85C%20%uC7A1%uC558%uB358%20MySingleton%uC5D0%20%uB300%uD55C%20%uAC12%uC744%20%uD655%uC778%uD574%20%uBCFC%uB824%uACE0%20%uD568.%0A-%20%uC77C%uB2E8%20%uC815%uC801%uBCC0%uC218%uCD08%uAE30%uD654%uC5D0%20%uB300%uD55C%20%uCF54%uB4DC%uB97C%20%uB2E4%uC2DC%20%uD55C%uBC88%uBCF4%uBA74%0A%0A%60%60%60csharp%0AMySingleton.Current.id%20%3D%2012345%3B%0AMySingleton.Current.name%20%3D%20%22william%22%3B%0AMySingleton.Current.friends%20%3D%20new%20List%3Cstring%3E%20%7B%20%22brandon%22%2C%20%22kevin%22%20%7D%3B%0A%60%60%60%0A%0A-%20MySingleton%uC73C%uB85C%20%uD0C0%uC785%uC744%20%uC9C0%uC815%uD574%uC11C%20%uD799%uC5D0%uC11C%20%uBCC0%uC218%uB97C%20%uB364%uD504.%0A-%20%60%21dumpheap%20-type%20MySingleton%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21dumpheap%20-type%20MySingleton%0A%20%20%20%20%20%20%20%20%20Address%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20%20Size%0A000001963d844660%2000007ffce4e65c78%20%20%20%20%20%20%2040%20%20%20%20%20%0A%0AStatistics%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Count%20%20%20%20TotalSize%20Class%20Name%0A00007ffce4e65c78%20%20%20%20%20%20%20%201%20%20%20%20%20%20%20%20%20%20%2040%20MySimpleConApp.MySingleton%0ATotal%201%20objects%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844660%0AName%3A%20%20%20%20%20%20%20%20MySimpleConApp.MySingleton%0AMethodTable%3A%2000007ffce4e65c78%0AEEClass%3A%20%20%20%20%2000007ffce4fb10e0%0ASize%3A%20%20%20%20%20%20%20%2040%280x28%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5Cproject%5C160516_DotNetDebugging%5CMySimpleConApp%5Cbin%5CDebug%5CMySimpleConApp.exe%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000003%20%20%20%20%20%20%2018%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%2012345%20%3Cid%3Ek__BackingField%0A00007ffd41158538%20%204000004%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20System.String%20%200%20instance%20000001963d844410%20%3Cname%3Ek__BackingField%0A00007ffd40abd6c8%20%204000005%20%20%20%20%20%20%2010%20...tring%2C%20mscorlib%5D%5D%20%200%20instance%20000001963d844688%20%3Cfriends%3Ek__BackingField%0A00007ffce4e65c78%20%204000006%20%20%20%20%20%20%20%208%20...onApp.MySingleton%20%200%20%20%20static%20000001963d844660%20_Current%0A%60%60%60%0A%0A-%20%uC77C%uB2E8%20name%20%uC18D%uC131%uC744%20%uD655%uC778.%0A-%20%60%21DumpObj%20/d%20000001963d844410%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844410%0AName%3A%20%20%20%20%20%20%20%20System.String%0AMethodTable%3A%2000007ffd41158538%0AEEClass%3A%20%20%20%20%2000007ffd40aa4ab8%0ASize%3A%20%20%20%20%20%20%20%2040%280x28%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5CWINDOWS%5CMicrosoft.Net%5Cassembly%5CGAC_64%5Cmscorlib%5Cv4.0_4.0.0.0__b77a5c561934e089%5Cmscorlib.dll%0AString%3A%20%20%20%20%20%20william%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000243%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%207%20m_stringLength%0A00007ffd411596e8%20%204000244%20%20%20%20%20%20%20%20c%20%20%20%20%20%20%20%20%20%20System.Char%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2077%20m_firstChar%0A00007ffd41158538%20%204000248%20%20%20%20%20%20%2080%20%20%20%20%20%20%20%20System.String%20%200%20%20%20shared%20%20%20%20%20%20%20%20%20%20%20static%20Empty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%3E%20Domain%3AValue%20%20000001963b9500e0%3ANotInit%20%20%3C%3C%0A%60%60%60%0A%0A-%20friends%20%uB294%20List%3Cstring%3E%uD0C0%uC785%uC774%uAE30%20%uB54C%uBB38%uC5D0%20%uBA87%uB2E8%uACC4%uB97C%20%uAC70%uCCD0%uC57C%20%uD55C%uB2E4.%20%0A-%20%uC77C%uB2E8%20friends%uB97C%20%uB364%uD504%uD558%uACE0%2C%0A-%20%60%21DumpObj%20/d%20000001963d844688%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844688%0AName%3A%20%20%20%20%20%20%20%20System.Collections.Generic.List%601%5B%5BSystem.String%2C%20mscorlib%5D%5D%0AMethodTable%3A%2000007ffd40abd6c8%0AEEClass%3A%20%20%20%20%2000007ffd40b6b310%0ASize%3A%20%20%20%20%20%20%20%2040%280x28%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5CWINDOWS%5CMicrosoft.Net%5Cassembly%5CGAC_64%5Cmscorlib%5Cv4.0_4.0.0.0__b77a5c561934e089%5Cmscorlib.dll%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd41147288%20%204001820%20%20%20%20%20%20%20%208%20%20%20%20%20System.__Canon%5B%5D%20%200%20instance%20000001963d8446c8%20_items%0A00007ffd4115af60%20%204001821%20%20%20%20%20%20%2018%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%202%20_size%0A00007ffd4115af60%20%204001822%20%20%20%20%20%20%201c%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%202%20_version%0A00007ffd41158b18%20%204001823%20%20%20%20%20%20%2010%20%20%20%20%20%20%20%20System.Object%20%200%20instance%200000000000000000%20_syncRoot%0A00007ffd41147288%20%204001824%20%20%20%20%20%20%20%200%20%20%20%20%20System.__Canon%5B%5D%20%200%20%20%20shared%20%20%20%20%20%20%20%20%20%20%20static%20_emptyArray%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%3E%20Domain%3AValue%20dynamic%20statics%20NYI%20000001963b9500e0%3ANotInit%20%20%3C%3C%0A%60%60%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A-%20%uB2E4%uC2DC%20_items%uB97C%20%uB364%uD504%uD568.%0A-%20_items%uB97C%20%uB364%uD504%uD560%uB54C%uB294%20%uBCC0%uC218%uB364%uD504%uAC00%20%uC544%uB2CC%20%uBC30%uC5F4%uB364%uD504%uB97C%20%uC0AC%uC6A9%uD568.%0A-%20%60%21DumpArray%20/d%20000001963d8446c8%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpArray%20/d%20000001963d8446c8%0AName%3A%20%20%20%20%20%20%20%20System.String%5B%5D%0AMethodTable%3A%2000007ffd41159880%0AEEClass%3A%20%20%20%20%2000007ffd40b624a8%0ASize%3A%20%20%20%20%20%20%20%2056%280x38%29%20bytes%0AArray%3A%20%20%20%20%20%20%20Rank%201%2C%20Number%20of%20elements%204%2C%20Type%20CLASS%0AElement%20Methodtable%3A%2000007ffd41158538%0A%5B0%5D%20000001963d844438%0A%5B1%5D%20000001963d844460%0A%5B2%5D%20null%0A%5B3%5D%20null%0A%60%60%60%0A%0A-%20%uBC30%uC5F4%uC774%202%uAC1C%uB9CC%20%uD560%uB2F9%uB41C%uAC83%uC774%20%uD655%uC778%uB428.%0A-%20%uC774%uC911%200%uBC88%uC9F8%20%uAC12%uC744%20%uB364%uD504%uD574%uBCF4%uBA74%20brandon%uC774%uB77C%uB294%20%uAC12%uC774%20%uC815%uD655%uD788%20%uD655%uC778%uB428.%0A-%20%uC774%uC911%201%uBC88%uC9F8%20%uAC12%uC744%20%uB364%uD504%uD574%uBCF4%uBA74%20kevin%uC774%uB77C%uB294%20%uAC12%uC774%20%uC815%uD655%uD788%20%uD655%uC778%uB428.%0A-%20%60%21DumpObj%20/d%20000001963d844438%60%0A-%20%60%21DumpObj%20/d%20000001963d844460%60%0A%0A%60%60%60powershell%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844438%0AName%3A%20%20%20%20%20%20%20%20System.String%0AMethodTable%3A%2000007ffd41158538%0AEEClass%3A%20%20%20%20%2000007ffd40aa4ab8%0ASize%3A%20%20%20%20%20%20%20%2040%280x28%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5CWINDOWS%5CMicrosoft.Net%5Cassembly%5CGAC_64%5Cmscorlib%5Cv4.0_4.0.0.0__b77a5c561934e089%5Cmscorlib.dll%0AString%3A%20%20%20%20%20%20brandon%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000243%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%207%20m_stringLength%0A00007ffd411596e8%20%204000244%20%20%20%20%20%20%20%20c%20%20%20%20%20%20%20%20%20%20System.Char%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2062%20m_firstChar%0A00007ffd41158538%20%204000248%20%20%20%20%20%20%2080%20%20%20%20%20%20%20%20System.String%20%200%20%20%20shared%20%20%20%20%20%20%20%20%20%20%20static%20Empty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%3E%20Domain%3AValue%20%20000001963b9500e0%3ANotInit%20%20%3C%3C%0A0%3A000%3E%20%21DumpObj%20/d%20000001963d844460%0AName%3A%20%20%20%20%20%20%20%20System.String%0AMethodTable%3A%2000007ffd41158538%0AEEClass%3A%20%20%20%20%2000007ffd40aa4ab8%0ASize%3A%20%20%20%20%20%20%20%2036%280x24%29%20bytes%0AFile%3A%20%20%20%20%20%20%20%20C%3A%5CWINDOWS%5CMicrosoft.Net%5Cassembly%5CGAC_64%5Cmscorlib%5Cv4.0_4.0.0.0__b77a5c561934e089%5Cmscorlib.dll%0AString%3A%20%20%20%20%20%20kevin%0AFields%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MT%20%20%20%20Field%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Type%20VT%20%20%20%20%20Attr%20%20%20%20%20%20%20%20%20%20%20%20Value%20Name%0A00007ffd4115af60%20%204000243%20%20%20%20%20%20%20%208%20%20%20%20%20%20%20%20%20System.Int32%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%205%20m_stringLength%0A00007ffd411596e8%20%204000244%20%20%20%20%20%20%20%20c%20%20%20%20%20%20%20%20%20%20System.Char%20%201%20instance%20%20%20%20%20%20%20%20%20%20%20%20%20%20%206b%20m_firstChar%0A00007ffd41158538%20%204000248%20%20%20%20%20%20%2080%20%20%20%20%20%20%20%20System.String%20%200%20%20%20shared%20%20%20%20%20%20%20%20%20%20%20static%20Empty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3E%3E%20Domain%3AValue%20%20000001963b9500e0%3ANotInit%20%20%3C%3C%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20VS%uB514%uBC84%uAC70%uC5D0%uC11C%20%uB85C%uB4DC%0A-%20windbg%uC5D0%20%uBE44%uD558%uBA74%20%uC544%uC8FC%20%uC544%uC8FC%20%uAC04%uB2E8%uD568%21%0A-%20%uB364%uD504%uD30C%uC77C%uC744%20VS%uB514%uBC84%uAC70%uC5D0%uC11C%20%uC624%uD508%uD568%0A%20%20%20%20-%20%uADF8%uB0E5%20%uBE44%uC8FC%uC5BC%uC2A4%uD29C%uB514%uC624%uC5D0%uC11C%20dmp%20%uD30C%uC77C%uC5F4%uAE30%0A%20%20%20%20%0A%21%5BAlt%20text%5D%28./1463399398325.png%29%0A%0A-%20%uB85C%uB4DC%uB41C%20%uB364%uD504%uD30C%uC77C%20%uACBD%uB85C%2C%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uC2DC%uAC04%2C%20%uD504%uB85C%uC138%uC2A4%20%uC815%uBCF4%2C%20OS%uC815%uBCF4%20%uB4F1%20%uB2E4%uC591%uD55C%20%uAE30%uCD08%uC815%uBCF4%uB4E4%uC744%20%uC218%uC9D1%uD560%20%uC218%20%uC788%uC74C.%0A-%20%60Debug%20Managed%20Only%60%20%uB97C%20%uD074%uB9AD%uD558%uC5EC%20%uB514%uBC84%uAE45%20%uC2DC%uC791%0A%0A%21%5BAlt%20text%5D%28./1463399510831.png%29%0A%0A-%20%uC2A4%uB808%uB4DC%uB9AC%uC2A4%uD2B8%20%uC911%uC5D0%uC11C%20%uBA54%uC778%uC2A4%uB808%uB4DC%uB97C%20%uCC3E%uACE0%20%uD3BC%uCCD0%uC11C%20%uB9C8%uC9C0%uB9C9%20%uB8E8%uD2F4%uC778%20Program.Main%20%uD568%uC218%uB97C%20%uD074%uB9AD%uD558%uC5EC%20%uC774%uB3D9%0A%0A%21%5BAlt%20text%5D%28./1463399553973.png%29%0A%0A-%20Program.Main%20%uD568%uC218%uC758%20%uC18C%uC2A4%uCF54%uB4DC%uAC00%20%uD654%uBA74%uC5D0%20%uB744%uC6CC%uC9D0%0A-%20%uC18C%uC2A4%uCF54%uB4DC%uC5D0%uC11C%20%uC815%uC9C0%uC810%uC5D0%20%uB178%uB780%uC0C9%20%uD654%uC0B4%uD45C%uB3C4%20%uD45C%uC2DC%uB428.%0A-%20%uC815%uC9C0%uC810%20%uAE30%uC900%uC73C%uB85C%20%uB85C%uCEEF%uBCC0%uC218%20p%uC640%20MySingleton.Current%20%uAC19%uC740%20%uC815%uC801%uBCC0%uC218%uC5D0%20%uC811%uADFC%uD558%uB294%20%uAC83%uB3C4%20%uAC00%uB2A5%uD568.%0A%0A%21%5BAlt%20text%5D%28./1463399716505.png%29%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20VS%uB514%uBC84%uAC70%20%uC0AC%uC6A9%uC2DC%20%uC8FC%uC758%uD560%20%uC810%0A%20-%20%uBD84%uC11D%uB300%uC0C1%20dmp%uD30C%uC77C%uC744%20%uBC1C%uC0DD%uC2DC%uD0A8%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%uC758%20pdb%uD30C%uC77C%uC774%20%uBD84%uC11D%uC2DC%20%uAF2D%20%uAC19%uC740%20%uB514%uB809%uD1A0%uB9AC%uC5D0%20%uC874%uC7AC%uD574%uC57C%20%uD568.%0A%20-%20%uC5ED%uC2DC%20%uAC19%uC740%uBC84%uC804%uC758%20%uC18C%uC2A4%uCF54%uB4DC%uB3C4%20%uC5B4%uB514%uC5D4%uAC00%uB294%20%uC874%uC7AC%uD574%uC57C%20%uD558%uB294%uB370%2C%20VS%uAC00%20%uBC1C%uACAC%uD558%uC9C0%20%uBABB%uD558%uBA74%20%uC18C%uC2A4%uCF54%uB4DC%20%uCC3E%uAE30%20%uB300%uD654%uC0C1%uC790%uAC00%20%uC720%uB3C4%uB418%uBBC0%uB85C%20%uC18C%uC2A4%uCF54%uB4DC%uAC00%20%uC900%uBE44%uAC00%20%uB418%uC5B4%20%uC788%uC5B4%uC57C%20%uD568.%0A%20-%20pdb%uD30C%uC77C%uBC84%uC804%uC740%20dmp%uD30C%uC77C%uACFC%20%uC815%uD655%uD788%20%uAC19%uC544%uC57C%20%uD558%uC9C0%uB9CC%2C%20%uC18C%uC2A4%uCF54%uB4DC%uB294%20%uBD84%uC11D%uB300%uC0C1%20%uC774%uC678%uC758%20%uBD80%uBD84%uC774%20%uC218%uC815%uB41C%uAC83%uC740%20%uC0C1%uAD00%uC5C6%uC74C.%0A%20-%20%uC2E4%uC6A9%uC801%uC73C%uB85C%uB294%20CBT%2C%20OBT%uB4F1%20%uBCF8%uACA9%20%uD14C%uC2A4%uD2B8%uC5D0%20%uC55E%uC11C%uC11C%20%uBC84%uC804%uBCC4%uB85C%20pdb%uB97C%20%uBAA8%uC544%uB450%uC5B4%2C%20%uD544%uC694%uD560%uB54C%uB9C8%uB2E4%20%uC5F0%uACB0%uD574%uC11C%20%uC0AC%uC6A9%uD558%uB294%uAC83%uC774%20%uC88B%uACA0%uC74C.%0A%20%20%20%20%20%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%20%0A%23%23%20%uB2F7%uB137%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uB0B4%uC5D0%uC11C%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uD558%uAE30%0A-%20%uC5B4%uD50C%uB9AC%uCF00%uC774%uC158%20%uD06C%uB798%uC2DC%uC0C1%uD669%uC774%uB098%2C%20%uC2E4%uD589%uC911%uC774%uB77C%uB3C4%20%uD2B9%uC815%uC2DC%uC810%uC5D0%20%uC989%uC2DC%20%uB364%uD504%uB97C%20%uC218%uD589%uD558%uB294%20%uBC29%uBC95%uC774%20%uD544%uC694%uD560%20%uB54C%uAC00%20%uB9CE%uC74C.%0A%20%20%20%20%20-%20%uD06C%uB798%uC2DC%20%uC774%uD6C4%20%uB514%uBC84%uAE45%0A%20%20%20%20%20-%20%uC0AC%uC6A9%uC790%uD658%uACBD%uC5D0%uC11C%20%uC2E4%uD589%uC911%20%uB514%uBC84%uAE45%0A%20%20%20%20%20-%20%uC0AC%uC6A9%uC790%uD658%uACBD%uAC1C%uC120%20%uD504%uB85C%uADF8%uB7A8%28%3F%29%0A-%20%uB2F9%uC5F0%uD788%20%uB364%uD504%uD30C%uC77C%20%uC0DD%uC131%uAE30%uB2A5%uC774%20API%uB85C%20%uC81C%uACF5%uB428.%0A%20%20%20%20-%20%uC544%uC27D%uAC8C%uB3C4%20Win32%20API%uC774%uBBC0%uB85C%20pinvoke%20%uC0AC%uC6A9%uD574%uC57C%20%uD568.%0A%20%20%20%20%0A%60%60%60c%23%0Anamespace%20MySimpleConApp%0A%7B%0A%20%20%20%20public%20static%20class%20MiniDumpWriter%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%5BFlags%5D%0A%20%20%20%20%20%20%20%20public%20enum%20MINIDUMP_TYPE%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpNormal%20%3D%200x00000000%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithDataSegs%20%3D%200x00000001%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithFullMemory%20%3D%200x00000002%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithHandleData%20%3D%200x00000004%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpFilterMemory%20%3D%200x00000008%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpScanMemory%20%3D%200x00000010%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithUnloadedModules%20%3D%200x00000020%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithIndirectlyReferencedMemory%20%3D%200x00000040%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpFilterModulePaths%20%3D%200x00000080%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithProcessThreadData%20%3D%200x00000100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithPrivateReadWriteMemory%20%3D%200x00000200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithoutOptionalData%20%3D%200x00000400%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithFullMemoryInfo%20%3D%200x00000800%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithThreadInfo%20%3D%200x00001000%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWithCodeSegs%20%3D%200x00002000%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%5BDllImport%28%22dbghelp.dll%22%2C%20EntryPoint%20%3D%20%22MiniDumpWriteDump%22%2C%20CallingConvention%20%3D%20CallingConvention.StdCall%2C%20CharSet%20%3D%20CharSet.Unicode%2C%20ExactSpelling%20%3D%20true%2C%20SetLastError%20%3D%20true%29%5D%0A%20%20%20%20%20%20%20%20static%20extern%20bool%20MiniDumpWriteDump%28IntPtr%20hProcess%2C%20uint%20processId%2C%20SafeHandle%20hFile%2C%20uint%20dumpType%2C%20IntPtr%20expParam%2C%20IntPtr%20userStreamParam%2C%20IntPtr%20callbackParam%29%3B%0A%0A%20%20%20%20%20%20%20%20public%20static%20bool%20Write%28%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20currentProcess%20%3D%20Process.GetCurrentProcess%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20currentProcessHandle%20%3D%20currentProcess.Handle%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20currentProcessId%20%3D%20%28uint%29currentProcess.Id%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20fileName%20%3D%20Path.Combine%28AppDomain.CurrentDomain.BaseDirectory%2C%20%24@%22%7BDateTime.Now.ToString%28%22yyMMdd-HHmmss%22%29%7D.mini.dmp%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20options%20%3D%20MINIDUMP_TYPE.MiniDumpNormal%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20%28var%20fs%20%3D%20new%20FileStream%28fileName%2C%20FileMode.Create%2C%20FileAccess.ReadWrite%2C%20FileShare.Write%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWriteDump%28currentProcessHandle%2C%20currentProcessId%2C%20fs.SafeFileHandle%2C%20%28uint%29options%2C%20IntPtr.Zero%2C%20IntPtr.Zero%2C%20IntPtr.Zero%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20fileName%20%3D%20Path.Combine%28AppDomain.CurrentDomain.BaseDirectory%2C%20%24@%22%7BDateTime.Now.ToString%28%22yyMMdd-HHmmss%22%29%7D.full.dmp%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20options%20%3D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MINIDUMP_TYPE.MiniDumpNormal%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MINIDUMP_TYPE.MiniDumpWithFullMemory%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MINIDUMP_TYPE.MiniDumpWithHandleData%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MINIDUMP_TYPE.MiniDumpWithProcessThreadData%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MINIDUMP_TYPE.MiniDumpWithThreadInfo%3B%20%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20%28var%20fs%20%3D%20new%20FileStream%28fileName%2C%20FileMode.Create%2C%20FileAccess.ReadWrite%2C%20FileShare.Write%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MiniDumpWriteDump%28currentProcessHandle%2C%20currentProcessId%2C%20fs.SafeFileHandle%2C%20%28uint%29options%2C%20IntPtr.Zero%2C%20IntPtr.Zero%2C%20IntPtr.Zero%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%60%60%60%0A%0A-%20%uC774%uB807%uB4EF%20dbghelp.dll%uC758%20MiniDumpWriteDump%20%uD568%uC218%uB97C%20%uC0AC%uC6A9%uD558%uC5EC%20%uAD6C%uD604%uC744%20%uD558%uB294%uB370%20%uBBF8%uB2C8%uB364%uD504%uC640%20%uD480%uB364%uD504%uB97C%20%uD568%uAED8%20%uB9CC%uB4E4%uB3C4%uB85D%20%uAD6C%uD604%uD588%uC74C.%0A-%20%uC0C1%uAE30%20%uC5B8%uAE09%uD588%uB4EF%20%uBBF8%uB2C8%uB364%uD504%uB294%20%uCF5C%uC2A4%uD14D%uC815%uBCF4%uB9CC%2C%20%uD480%uB364%uD504%uB294%20%uCF5C%uC2A4%uD14D%uACFC%20%uBA54%uBAA8%uB9AC%uC815%uBCF4%uB97C%20%uBAA8%uB450%20%uD3EC%uD568%uD568.%0A-%20%uC0AC%uC6A9%uD558%uB294%20%uCF54%uB4DC%uB294%20%uC544%uB798%uC640%20%uAC19%uC74C.%0A%20%20%20%20-%20d%uB97C%20%uD074%uB9AD%uD558%uBA74%20%uC218%uD589%uD558%uAC8C%20%uB418%uC5B4%20%uC788%uC74C.%0A%0A%60%60%60c%23%0Aif%20%28key.Key%20%3D%3D%20ConsoleKey.D%29%0A%7B%0A%20%20%20%20Console.WriteLine%28%22create%20dump...%22%29%3B%0A%20%20%20%20MiniDumpWriter.Write%28%29%3B%0A%7D%0A%60%60%60%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E

이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글