160516 .NET Application Debugging

Edit

Summary

I'll introduce the debugging solution of .NET Application that is variety and pratical.
  • Global exception handling
    • Most frequently used.
    • Use as the after-death debugging.
    • Usually upload the exception log include the callstack information, and analyze it at the global exception routine.
    • By this callstack information, about 80% ~ 90% errors can be anaylized.
    • But this cannot analyze the exact variables's value.
  • At runtime, attach the VS debugger.
    • Connect DevPC( or remote pc with debugging env ) and debug based on the break point solution.
    • Very strong solution because it is based on the break point solution.
    • But it is not possible as after-death debugging, demanded to effort setting as dev environment.
  • After creating dump file, and analyze with windbg.
    • At the runtime or at the crash time, debug with windbg by the dump file.
    • Callstack inforamtion, memory information also can check.
    • Can use all the strong functions provided by windbg.
    • But should know windbg's commands very well.
    • And also windbg don't support the convinient GUI.
      • In debugging, visualization is very important, so weakness at this is very big disadvantage.
  • After creating dumpfiles, analyze with VS debugger.
    • Has same advantages as the analyzing dump file solution.
    • As using VS debugger, don't need difficult commands, and supported convinient GUI!




Global exception handling

Simple application for test

  • At AppDomain.CurrentDomain.UnhandledException , it handles global exceptions.
  • Added initializing codes for local variable, static variable.
  • Q, D, E keys are acts as quit, dump, exception.
    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
    }

At occuring an excption, print the exception and callstack information.(like a usual .NET application)

  • The callstack information are printed very well!!!
  • If it is enough to analyze error situation, you don't need to read this article more.
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




Create dump file manually

  • As the easiest way to create dump file, open the task manager, and find the exact process, and right click, and create dump file.
  • This dump file that is created by task manager is full-dump file. This contains callstack, variables(=memory) informations.
  • Instead of task manager, you can use ProcessExplorer. This can create mini-dump, full-dump files separatelly. At this time you can analyze callstack information only by mini-dump file.
  • Of course, by this reason, full-dump file has very big volume.
  • Despite of very small application, full dump file occupy 97Mb.
PS C:\Users\Hyundong\AppData\Local\Temp> ls *.dmp

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




Download windbg





By windbg, load dump file, and analyze

Load dump file

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

Analyze dump file

  • Load windbg
  • Load MySimpleConApp.DMP
  • Specify the properties of '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>
  • Load sos.dll clr.dll.
  • At windbg, .NET application commands are included this dlls.
  • .loadby sos clr
0:000> .loadby sos clr
  • Print callstack informations.
  • All debuggings are begin with printing callstack information!
  • !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] 
  • At above result, if you click 0x000001963d844640 (Program.Main's local variable), you can print object's dump.
  • This variable is 'var p = new MyPerson();'
  • As 'p.id = 101;, you can check this value.
  • !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
  • Trying to check p's name, print dump 000001963d844410.
  • It can be checked text value '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  <<
  • In addtion to this, if you want to know the value of all the memroy allocated to the heap, recklessly…
  • Sorted by address and types are printed clearly as with statistical.
  • But the result is longer because of enormous internal system variables, even though the short program. :(
  • !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
  • Check the value of the MySingleton as a static variable.
  • Once you see the code for the intializing again…
MySingleton.Current.id = 12345;
MySingleton.Current.name = "william";
MySingleton.Current.friends = new List<string> { "brandon", "kevin" };
  • Dump the heap variable to specify the type Singleton.
  • !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
  • Once you determine the name attribute.
  • !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 will take a few steps because List type.
  • Once dump the 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  <<
  • Again dump _items.
  • At dumping _items, use dumparray, not dumpobject.
  • !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
  • It is confirmed that 2 arrays are assigned only.
  • If you check 0th value, you can find value of brandon.
  • If you check 1th value, you can find value of 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  <<




Load at VS debugger

  • Compared to the windbg it is very simple!
  • It should open the dump file in VS debugger
    • Just dmp file open in Visual Studio
  • Load the dump file path, a dump file creation time, process information, may be collected based on a variety of information such as OS information.
  • Debug Managed Only Click the Start Debugging
  • Go looking for the main thread in the thread list, and click the last routine function of expanding this Program.Main
  • Program.Main source code of the function is displayed on the screen
  • A yellow arrow appears on the stopping point of the source code.
  • It is possible to access the local variables p, Singleton.Current static variable.




Note that when using VS debugger

  • Pdb file for the application that created the dmp file must exist in the same directory in the analysis.
  • It shall have the same version of the source code exists. VS does not find it, to find the source code dialog box is derived.
  • Pdb file version is also exactly the same as the dmp file. However, the Fair is the modified source code other than analysis.
  • Good to use it practically every connected prior to full-scale tests such as CBT, OBT, put together by the pdb version, if necessary.




To create dump files from within .NET applications

  • The application crash situation, a point in time of the execution, requires a way to perform an immediate dump.
    • Crash-after debugging
    • Debugging at the user's runtime
    • Customer Experience Improvement Program(?)
  • API functions are provided as well as create a dump file
    • Unfortunately, so you must use 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;
        }
    }
}
  • Use MiniDumpWriteDump function of dbghelp.dll. It also made a mini dumps and full dumps.
  • The mini dump will contain only callstack information. full dump includes both callstack and memory information.
  • Code are as follows:
    • Clicking d, it performs.
if (key.Key == ConsoleKey.D)
{
    Console.WriteLine("create dump...");
    MiniDumpWriter.Write();
}




%23%20160516%20.NET%20Application%20Debugging%0A%0A@%28%uD669%uD604%uB3D9%20%uB178%uD2B8%uBD81%29%5B.net%2C%20c%23%2C%20debugging%2C%20study%2C%20windbg%2C%20english%5D%0A%0A%5Btoc%5D%0A%0A%23%23%20Summary%0AI%27ll%20introduce%20the%20debugging%20solution%20of%20.NET%20Application%20that%20is%20variety%20and%20pratical.%0A%0A-%20Global%20exception%20handling%0A%20%20%20%20-%20Most%20frequently%20used.%0A%20%20%20%20-%20Use%20as%20the%20after-death%20debugging.%0A%20%20%20%20-%20Usually%20upload%20the%20exception%20log%20include%20the%20callstack%20information%2C%20and%20analyze%20it%20at%20the%20global%20exception%20routine.%0A%20%20%20%20-%20By%20this%20callstack%20information%2C%20about%2080%25%20%7E%2090%25%20errors%20can%20be%20anaylized.%0A%20%20%20%20-%20But%20this%20cannot%20analyze%20the%20exact%20variables%27s%20value.%0A-%20At%20runtime%2C%20attach%20the%20VS%20debugger.%0A%20%20%20%20-%20Connect%20DevPC%28%20or%20remote%20pc%20with%20debugging%20env%20%29%20and%20debug%20based%20on%20the%20break%20point%20solution.%0A%20%20%20%20-%20Very%20strong%20solution%20because%20it%20is%20based%20on%20the%20break%20point%20solution.%0A%20%20%20%20-%20But%20it%20is%20not%20possible%20as%20after-death%20debugging%2C%20demanded%20to%20effort%20setting%20as%20dev%20environment.%0A-%20After%20creating%20dump%20file%2C%20and%20analyze%20with%20windbg.%0A%20%20%20%20-%20At%20the%20runtime%20or%20at%20the%20crash%20time%2C%20debug%20with%20windbg%20by%20the%20dump%20file.%0A%20%20%20%20-%20Callstack%20inforamtion%2C%20memory%20information%20also%20can%20check.%0A%20%20%20%20-%20Can%20use%20all%20the%20strong%20functions%20provided%20by%20windbg.%0A%20%20%20%20-%20But%20should%20know%20windbg%27s%20commands%20very%20well.%0A%20%20%20%20-%20And%20also%20windbg%20don%27t%20support%20the%20convinient%20GUI.%0A%20%20%20%20%20%20%20%20-%20In%20debugging%2C%20visualization%20is%20very%20important%2C%20so%20weakness%20at%20this%20is%20very%20big%20disadvantage.%0A-%20After%20creating%20dumpfiles%2C%20analyze%20with%20VS%20debugger.%0A%20%20%20%20-%20Has%20same%20advantages%20as%20the%20analyzing%20dump%20file%20solution.%0A%20%20%20%20-%20As%20using%20VS%20debugger%2C%20don%27t%20need%20difficult%20commands%2C%20and%20supported%20convinient%20GUI%21%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20Sample%20Sources%0ADownload%20here%0Ahttps%3A//github.com/HyundongHwang/DotNetDebugging%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20Global%20exception%20handling%0A%23%23%23%20Simple%20application%20for%20test%0A-%20At%20AppDomain.CurrentDomain.UnhandledException%20%2C%20it%20handles%20global%20exceptions.%0A-%20Added%20initializing%20codes%20for%20local%20variable%2C%20static%20variable.%0A-%20Q%2C%20D%2C%20E%20keys%20are%20acts%20as%20quit%2C%20dump%2C%20exception.%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%20At%20occuring%20an%20excption%2C%20print%20the%20exception%20and%20callstack%20information.%28like%20a%20usual%20.NET%20application%29%0A-%20The%20callstack%20information%20are%20printed%20very%20well%21%21%21%0A-%20If%20it%20is%20enough%20to%20analyze%20error%20situation%2C%20you%20don%27t%20need%20to%20read%20this%20article%20more.%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%20Create%20dump%20file%20manually%0A-%20As%20the%20easiest%20way%20to%20create%20dump%20file%2C%20open%20the%20task%20manager%2C%20and%20find%20the%20exact%20process%2C%20and%20right%20click%2C%20and%20create%20dump%20file.%0A-%20This%20dump%20file%20that%20is%20created%20by%20task%20manager%20is%20full-dump%20file.%20This%20contains%20callstack%2C%20variables%28%3Dmemory%29%20informations.%0A-%20Instead%20of%20task%20manager%2C%20you%20can%20use%20ProcessExplorer.%20This%20can%20create%20mini-dump%2C%20full-dump%20files%20separatelly.%20At%20this%20time%20you%20can%20analyze%20callstack%20information%20only%20by%20mini-dump%20file.%0A-%20Of%20course%2C%20by%20this%20reason%2C%20full-dump%20file%20has%20very%20big%20volume.%0A%0A%21%5BAlt%20text%5D%28./1463382078028.png%29%0A%0A-%20Despite%20of%20very%20small%20application%2C%20full%20dump%20file%20occupy%2097Mb.%0A%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%20Download%20windbg%0A-%20Download%20here%20%3A%20https%3A//msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx%0A-%20Install%20with%20WDK10%0A-%20C%3A%5CProgram%20Files%20%28x86%29%5CWindows%20Kits%5C10%5CDebuggers%5Cx64%5Cwindbg.exe%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20By%20windbg%2C%20load%20dump%20file%2C%20and%20analyze%0A%23%23%23%20Load%20dump%20file%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%20Analyze%20dump%20file%0A-%20Load%20windbg%20%0A-%20Load%20MySimpleConApp.DMP%0A-%20Specify%20the%20properties%20of%20%27User%20Mini%20Dump%20File%20with%20Full%20Memory%27%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-%20Load%20sos.dll%20clr.dll.%0A-%20At%20windbg%2C%20.NET%20application%20commands%20are%20included%20this%20dlls.%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-%20Print%20callstack%20informations.%0A-%20All%20debuggings%20are%20begin%20with%20printing%20callstack%20information%21%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-%20At%20above%20result%2C%20if%20you%20click%200x000001963d844640%20%28Program.Main%27s%20local%20variable%29%2C%20you%20can%20print%20object%27s%20dump.%0A-%20This%20variable%20is%20%27var%20p%20%3D%20new%20MyPerson%28%29%3B%27%0A-%20As%20%27p.id%20%3D%20101%3B%2C%20you%20can%20check%20this%20value.%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-%20Trying%20to%20check%20p%27s%20name%2C%20print%20dump%20000001963d844410.%0A-%20It%20can%20be%20checked%20text%20value%20%27william%27.%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-%20In%20addtion%20to%20this%2C%20if%20you%20want%20to%20know%20the%20value%20of%20all%20the%20memroy%20allocated%20to%20the%20heap%2C%20recklessly...%0A-%20Sorted%20by%20address%20and%20types%20are%20printed%20clearly%20as%20with%20statistical.%0A-%20But%20the%20result%20is%20longer%20because%20of%20enormous%20internal%20system%20variables%2C%20even%20though%20the%20short%20program.%20%3A%28%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-%20Check%20the%20value%20of%20the%20MySingleton%20as%20a%20static%20variable.%0A-%20Once%20you%20see%20the%20code%20for%20the%20intializing%20again...%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-%20Dump%20the%20heap%20variable%20to%20specify%20the%20type%20Singleton.%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-%20Once%20you%20determine%20the%20name%20attribute.%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%20will%20take%20a%20few%20steps%20because%20List%3Cstring%3E%20type.%0A-%20Once%20dump%20the%20friends.%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-%20Again%20dump%20_items.%0A-%20At%20dumping%20_items%2C%20use%20dumparray%2C%20not%20dumpobject.%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-%20It%20is%20confirmed%20that%202%20arrays%20are%20assigned%20only.%0A-%20If%20you%20check%200th%20value%2C%20you%20can%20find%20value%20of%20brandon.%0A-%20If%20you%20check%201th%20value%2C%20you%20can%20find%20value%20of%20kevin.%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%20Load%20at%20VS%20debugger%0A-%20Compared%20to%20the%20windbg%20it%20is%20very%20simple%21%0A-%20It%20should%20open%20the%20dump%20file%20in%20VS%20debugger%0A%20%20%20%20-%20Just%20dmp%20file%20open%20in%20Visual%20Studio%0A%20%20%20%20%0A%21%5BAlt%20text%5D%28./1463399398325.png%29%0A%0A-%20Load%20the%20dump%20file%20path%2C%20a%20dump%20file%20creation%20time%2C%20process%20information%2C%20may%20be%20collected%20based%20on%20a%20variety%20of%20information%20such%20as%20OS%20information.%0A-%20%60Debug%20Managed%20Only%60%20Click%20the%20Start%20Debugging%0A%0A%21%5BAlt%20text%5D%28./1463399510831.png%29%0A%0A-%20Go%20looking%20for%20the%20main%20thread%20in%20the%20thread%20list%2C%20and%20click%20the%20last%20routine%20function%20of%20expanding%20this%20Program.Main%0A%0A%21%5BAlt%20text%5D%28./1463399553973.png%29%0A%0A-%20Program.Main%20source%20code%20of%20the%20function%20is%20displayed%20on%20the%20screen%0A-%20A%20yellow%20arrow%20appears%20on%20the%20stopping%20point%20of%20the%20source%20code.%0A-%20It%20is%20possible%20to%20access%20the%20local%20variables%20p%2C%20Singleton.Current%20static%20variable.%0A%0A%21%5BAlt%20text%5D%28./1463399716505.png%29%0A%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%0A%23%23%20Note%20that%20when%20using%20VS%20debugger%0A%20-%20Pdb%20file%20for%20the%20application%20that%20created%20the%20dmp%20file%20must%20exist%20in%20the%20same%20directory%20in%20the%20analysis.%0A%20-%20It%20shall%20have%20the%20same%20version%20of%20the%20source%20code%20exists.%20VS%20does%20not%20find%20it%2C%20to%20find%20the%20source%20code%20dialog%20box%20is%20derived.%0A%20-%20Pdb%20file%20version%20is%20also%20exactly%20the%20same%20as%20the%20dmp%20file.%20However%2C%20the%20Fair%20is%20the%20modified%20source%20code%20other%20than%20analysis.%0A%20-%20Good%20to%20use%20it%20practically%20every%20connected%20prior%20to%20full-scale%20tests%20such%20as%20CBT%2C%20OBT%2C%20put%20together%20by%20the%20pdb%20version%2C%20if%20necessary.%0A%20%20%20%20%20%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%3Cbr/%3E%0A%20%0A%23%23%20To%20create%20dump%20files%20from%20within%20.NET%20applications%0A-%20The%20application%20crash%20situation%2C%20a%20point%20in%20time%20of%20the%20execution%2C%20requires%20a%20way%20to%20perform%20an%20immediate%20dump.%0A%20%20%20%20%20-%20Crash-after%20debugging%0A%20%20%20%20%20-%20Debugging%20at%20the%20user%27s%20runtime%0A%20%20%20%20%20-%20Customer%20Experience%20Improvement%20Program%28%3F%29%0A-%20API%20functions%20are%20provided%20as%20well%20as%20create%20a%20dump%20file%0A%20%20%20%20-%20Unfortunately%2C%20so%20you%20must%20use%20Win32%20API%20pinvoke.%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-%20Use%20MiniDumpWriteDump%20function%20of%20dbghelp.dll.%20It%20also%20made%20a%20mini%20dumps%20and%20full%20dumps.%0A-%20The%20mini%20dump%20will%20contain%20only%20callstack%20information.%20full%20dump%20includes%20both%20callstack%20and%20memory%20information.%0A-%20Code%20are%20as%20follows%3A%0A%20%20%20%20-%20Clicking%20d%2C%20it%20performs.%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를 다운로드하세요.

댓글