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. 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.