Debug in release mode
.net, debugging, sos, windbg
Solution
This is entirely normal, a side effect of the jitter optimizer making your code fast. The method disappeared because it got inlined, the stack variables disappeared because they are stored in CPU registers instead. You'll find the kind of optimizations performed by the jitter in this answer.
If you strongly favor diagnosability over speed then disabling the optimizer is technically an option. Select the Release build configuration, Project + Properties, Compiled tab, Advanced button, untick the "Enable optimizations" option. Not that I actually recommend you doing this btw.
Problem
I'm trying to debug a .NET managed code application for educational purposes with WinDbg and SOS. ``` Module Module1 Sub Main() Console.Read() throwExceptionMethod() End Sub Private Sub throwExceptionMethod() Dim localString As String = "bad string" If localString = "bad string" Then Throw New System.NotSupportedException("Can't process the string.") End If End Sub End Module ``` When compiled in debug mode I can see the method throwing the exception and the local string which broke my application. Output of !CLRStack command: ``` 0:000> !CLRStack OS Thread Id: 0x1148 (0) DBGHELP: mscorwks - public symbols C:\Program Files\Debugging Tools for Windows (x64)\sym\mscorwks.pdb\EC7B2AF3D7A74E1FB2A04CB8AF5F867A1\mscorwks.pdb DBGHELP: ntdll - public symbols C:\Program Files\Debugging Tools for Windows (x64)\sym\ntdll.pdb\9D04EB0AA387494FBD81ED062072B99C2\ntdll.pdb DBGHELP: mscoreei - public symbols C:\Program Files\Debugging Tools for Windows (x64)\sym\mscoreei.pdb\F2445BD7B5494942A39C87ED630879A92\mscoreei.pdb DBGHELP: MSCOREE - public symbols C:\Program Files\Debugging Tools for Windows (x64)\sym\mscoree.pdb\FB53EF9DD104439E9903F0B34128E0392\mscoree.pdb DBGHELP: KERNEL32 - public symbols C:\Program Files\Debugging Tools for Windows (x64)\sym\kernel32.pdb\C4D1D9065632419699A8B2F25B62381D2\kernel32.pdb Child-SP RetAddr Call Site 000000000020ec70 000007ff0019014a Prototipos.Module1.throwExceptionMethod() 000000000020ecc0 000007fef881d432 Prototipos.Module1.Main() ``` And the local string which the method is unable to process. Output of !dso and !do 00000000027002c0: ``` 0:000> !dso OS Thread Id: 0x1148 (0) RSP/REG Object Name 000000000020ea80 00000000026ff4c8 System.Text.DecoderNLS 000000000020eaa8 0000000002700340 System.NotSupportedException 000000000020eac0 0000000002700340 System.NotSupportedException 000000000020eae0 0000000002700340 System.NotSupportedException 000000000020ebb0 0000000002700340 System.NotSupportedException 000000000020ebc0 00000000027002f0 System.String 000000000020ec60 00000000027002f0 System.String 000000000020ec90 00000000027002c0 System.String 000000000020eca8 0000000002700340 System.NotSupportedException 000000000020ecc0 00000000026ff828 System.IO.TextReader+SyncTextReader 0:000> !do 00000000027002c0 Name: System.String MethodTable: 000007fef7ab7d90 EEClass: 000007fef76be560 Size: 46(0x2e) bytes (C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) String: bad string Fields: MT Field Offset Type VT Attr Value Name 000007fef7abf000 4000096 8 System.Int32 1 instance 11 m_arrayLength 000007fef7abf000 4000097 c System.Int32 1 instance 10 m_stringLength 000007fef7ab97d8 4000098 10 System.Char 1 instance 62 m_firstChar 000007fef7ab7d90 4000099 20 System.String 0 shared static Empty >> Domain:Value 00000000000bac20:00000000026f1308 << 000007fef7ab9688 400009a 28 System.Char[] 0 shared static WhitespaceChars >> Domain:Value 00000000000bac20:00000000026f1ba0 << ``` But in release mode, even with pdb loaded, I can't see useful information with WinDbg. Output of module information. Symbols are loaded: ``` 0:000> !lmi Prototipos.exe Loaded Module Info: [prototipos.exe] Module: Prototipos Base Address: 0000000000940000 Image Name: C:\Users\joseluis.vaquero\Documents\Visual Studio 2008\Projects\Prototipos\Prototipos\bin\Release\Prototipos.exe Machine Type: 332 (I386) Time Stamp: 52e64b75 Mon Jan 27 13:05:09 2014 Size: a000 CheckSum: 0 Characteristics: 102 Debug Data Dirs: Type Size VA Pointer CODEVIEW 89, 401c, 1c1c RSDS - GUID: {ABB91DE1-4132-4D69-B9E7-2D48B4C9A548} Age: 1, Pdb: C:\Users\joseluis.vaquero\Documents\Visual Studio 2008\Projects\Prototipos\Prototipos\obj\Release\Prototipos.pdb Image Type: FILE - Image read successfully from debugger. C:\Users\joseluis.vaquero\Documents\Visual Studio 2008\Projects\Prototipos\Prototipos\bin\Release\Prototipos.exe Symbol Type: PDB - Symbols loaded successfully from image path. C:\Users\joseluis.vaquero\Documents\Visual Studio 2008\Projects\Prototipos\Prototipos\bin\Release\Prototipos.pdb Load Report: private symbols & lines, not source indexed C:\Users\joseluis.vaquero\Documents\Visual Studio 2008\Projects\Prototipos\Prototipos\bin\Release\Prototipos.pdb ``` I can't see the ThrowExcetionMethod in Stack. ``` 0:000> !CLRStack OS Thread Id: 0xae4 (0) Child-SP RetAddr Call Site 00000000001fe920 000007fef881d432 Prototipos.Module1.Main() ``` I can't see local string dumping stack objects. ``` 0:000> !dso OS Thread Id: 0xae4 (0) RSP/REG Object Name 00000000001fe758 000000000268a840 System.NotImplementedException 00000000001fe770 000000000268a840 System.NotImplementedException 00000000001fe790 000000000268a840 System.NotImplementedException 00000000001fe860 000000000268a840 System.NotImplementedException 00000000001fe870 000000000268a840 System.NotImplementedException 00000000001fe910 000000000268a840 System.NotImplementedException 00000000001fe920 000000000268a840 System.NotImplementedException 00000000001fe928 000000000268a8c8 System.String ``` I'm unable to discover what is happening in a production environment with this information. Is there an way to get more information with WinDbg in release mode?