Visual Studio IDE may crash without any error message

While launching Visual Studio 2012/2010 IDE, Visual Studio IDE may crash without any error message. I launched the devenv.exe in the debugger and took a crash dump. You can also run the following command to capture a crash dump: cscript adplus.vbs -crash –sc “C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe”

After debugging I found the below Call Stack and the exception:

0:000> kL  
ChildEBP RetAddr 
00ebe444 73c390bf KERNELBASE!RaiseException+0x6c   
00ebe4e8 73d70a4c clr!RaiseTheExceptionInternalOnly+0x276   
00ebe500 73d70c7d clr!RaiseTheException+0x86   
00ebe528 73d70cad clr!RealCOMPlusThrowWorker+0x72   
(Inline) ——– clr!RealCOMPlusThrow+0x23   
00ebe55c 73cefae6 clr!RealCOMPlusThrow+0x2f   
00ebea44 73b63fbe clr!MethodTable::DoRunClassInitThrowing+0x382   
00ebeacc 73b64022 clr!JIT_GetSharedNonGCStaticBase_Helper+0x85   
00ebeb14 06c82520 clr!JIT_GetSharedNonGCStaticBase_Portable+0x2f   
00ebeb14 06c82520 WindowsBase!MS.Win32.HwndSubclass.HookWindowProc(IntPtr, WndProc, IntPtr)+0x50   
00ebeb24 06c82292 WindowsBase!MS.Win32.HwndSubclass.HookWindowProc(IntPtr, WndProc, IntPtr)+0x50   
00ebeb64 0347a24d WindowsBase!MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)+0x5a   
00ebeb98 750377d8 CLRStub[StubLinkStub]@9f897f120347a24d   
00ebebc4 750378cb user32!InternalCallWinProc+0x23   
00ebec40 75037b6f user32!UserCallWinProcCheckWow+0x100   
00ebeca4 7503e4e0 user32!DispatchClientMessage+0x15d   
00ebecdc 77942c92 user32!__fnINOUTLPPOINT5+0x2e   
00ebecf0 0160f320 ntdll!KiUserCallbackDispatcher+0x2e

0:000> !pe  
Exception object: 04041f58   
Exception type:   System.TypeInitializationException   
Message:          The type initializer for ‘MS.Win32.ManagedWndProcTracker’ threw an exception.   
InnerException:   System.BadImageFormatException, Use !PrintException 04040794 to see more.

StackTrace (generated):   
    SP       IP       Function   
    00EBEAEC 06C82964 WindowsBase!MS.Win32.ManagedWndProcTracker.TrackHwndSubclass(MS.Win32.HwndSubclass, IntPtr)+0x2c   
    00EBEB1C 06C82520 WindowsBase!MS.Win32.HwndSubclass.HookWindowProc(IntPtr, WndProc, IntPtr)+0x50   
    00EBEB34 06C82292 WindowsBase!MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)+0x5a

StackTraceString: <none>  
HResult: 80131534

0:000> !PrintException 04040794   
Exception object: 04040794   
Exception type:   System.BadImageFormatException   
Message:          Bad IL range.   
InnerException:   <none>   
StackTrace (generated):   
    SP       IP       Function   
    00000000 00000001 WindowsBase!MS.Internal.ShutDownListener..ctor(System.Object, MS.Internal.ShutDownEvents)+0x2   
    00EBE3F4 06C82ACA WindowsBase!MS.Win32.ManagedWndProcTracker+ManagedWndProcTrackerShutDownListener..ctor()+0xa   
    00EBE3F8 06C82AA7 WindowsBase!MS.Win32.ManagedWndProcTracker..cctor()+0x9f

StackTraceString: <none>  
HResult: 8007000b

0:000> .frame06   
06 00ebea44 73b63fbe clr!MethodTable::DoRunClassInitThrowing+0x382

0:000> dv /v /t  
@esi              class MethodTable * this = 0x06c9544c    
00ebe590          class GCCoop __gcHolder = class GCCoop   
00ebe5f8          class AppDomain * pDomain = 0x01079850   
00ebe5dc          class Thread * pThread = 0x010be9f8   
@edi              class ListLock * _pLock = 0x061dd010   
00ebe600          class Wrapper<ListLock *,&ListLock::HolderEnter,&ListLock::HolderLeave,0,&CompareDefault<ListLock *>,2,1> pInitLock = class Wrapper<ListLock *,&ListLock::HolderEnter,&ListLock::HolderLeave,0,&CompareDefault<ListLock *>,2,1>   
<unavailable>     struct MethodTable::DoRunClassInitThrowing::__l18::_gc gc = <value unavailable>   
<unavailable>     class ListLockEntry * pEntry = <value unavailable>   
<unavailable>     class FrameWithCookie<GCFrame> __gcframe = <value unavailable>   
<unavailable>     unsigned long hOrigInitException = <value unavailable>   
<unavailable>     class InlineSString<1024> _ssclsname_w_ = <value unavailable>   
<unavailable>     wchar_t * wszName = <value unavailable>   
00ebe5d8          unsigned long hNewInitException = 0x6c82938   
<unavailable>     class CLRException::HandlerState __state = <value unavailable>   
<unavailable>     class CAutoTryCleanup<CLRException::HandlerState> __autoCleanupTry = <value unavailable>   
00ebe59c          class Exception * __pExceptionRaw = 0x73b6c86f   
<unavailable>     class CLRLastThrownObjectException __defaultException = <value unavailable>   
<unavailable>     class ExceptionHolderTemplate<Exception> __pException = <value unavailable>   
<unavailable>     class ListLockEntry::LockHolder pLock = <value unavailable>   
<unavailable>     class ReleaseHolder<ListLockEntry> pEntry = <value unavailable>   
<unavailable>     struct MethodTable::DoRunClassInitThrowing::__l80::_gc gc = <value unavailable>   
00ebe574          class FrameWithCookie<GCFrame> __gcframe = class FrameWithCookie<GCFrame>   
<unavailable>     class InlineSString<1024> _ssclsname_w_ = <value unavailable>   
@ebx              wchar_t * wszName = 0x00ebe628 “MS.Win32.ManagedWndProcTracker”   
<unavailable>     class CLRException::HandlerState __state = <value unavailable>   
<unavailable>     class CAutoTryCleanup<CLRException::HandlerState> __autoCleanupTry = <value unavailable>   
00ebe598          class Exception * __pExceptionRaw = 0x00ebe920   
<unavailable>     class CLRLastThrownObjectException __defaultException = <value unavailable>   
<unavailable>     class ExceptionHolderTemplate<Exception> __pException = <value unavailable>

0:000> !dumpmt 0x06c9544c  
EEClass:         06c48194   
Module:          03473d48   
Name:            MS.Win32.ManagedWndProcTracker   
mdToken:         020002a2   
File:           C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll   
BaseSize:        0xc   
ComponentSize:   0x0   
Slots in VTable: 11   
Number of IFaces in IFaceMap: 0

I saved the module WindowsBase.dll locally by running the below command:

0:000> !savemodule 06da0000 C:\WindowsBase.dll

From the Visual Studio command prompt, I ran the following command to validate the MSIL and metadata: C:\>peverify  WindowsBase.dll

Microsoft (R) .NET Framework PE Verifier.  Version  4.0.30319.1  
Copyright (c) Microsoft Corporation.  All rights reserved.

[MD]: Error: Method has invalid local signature token (0x01af0039). [token:0x06000AFC]    
1 Error(s) Verifying C:\WindowsBase.dll

Hence, I copied the file WindowsBase.dll  from an another working system and launched Visual Studio IDE successfully.

Comments (2)

  1. Stephen Wells says:

    It looks like voodoo magic! How on earth did you know to do all that? For example, .frame06   ? How did you know that @esi              class MethodTable * this = 0x06c9544c      is the important line?

    Sometimes apps crash on me for no reason and I just have to give up, apparently if you know what you are doing you can figure out why!

  2. smondal says:

    At frame six of thread zero, the exception was thrown as highlight in the stack. Also apps crash for a reason. Of course some fundamental knowledge is required to find the cause of crashes.