Я сталкиваюсь со странной проблемой при попытке запустить Excel (64-разрядная версия 16.0.12527.20242) под отладчиком MSVS 2017 на удаленной машине с Windows 10 (10.0.17763.973): в этом случае и в этом только в случае, Excel обрабатывает сбои при запуске. Это довольно загадочно, поскольку не только Excel отлично работает вне отладчика, но и нормально запускает Excel, а затем подключается к нему из того же отладчика MSVS. И запуск Excel под WinDbg на той же машине работает также. Итак, у меня есть несколько возможных обходных путей, но было бы удобнее использовать отладчик MSVS from, а также мне бы очень хотелось понять, что может вызвать этот cra sh только в этой конкретной ситуации, но не в других.
Что касается деталей cra sh, это происходит из-за вызова ucrtbase.dll!terminate
после выброса исключения из Mso30win32client.dll
. Стек основного потока выглядит следующим образом:
Mso20win32client.dll!00007ffd81d54c7d()
Mso20win32client.dll!00007ffd81d55968()
ucrtbase.dll!raise()
ucrtbase.dll!abort()
ucrtbase.dll!terminate()
vcruntime140.dll!FindHandler<__FrameHandler3>(EHExceptionRecord * pExcept=0x000000eca96fc8b0, unsigned __int64 * pRN=0x000000eca96fbc60, _CONTEXT * pContext=0x0000000000000000, _xDISPATCHER_CONTEXT * pDC=0x000000eca96fc240, const _s_FuncInfo * pFuncInfo=0x00007ffd7b2b7db0, unsigned char recursive='\0', int CatchDepth=0x00000000, unsigned __int64 * pMarkerRN=0x0000000000000000)
vcruntime140.dll!__InternalCxxFrameHandler<__FrameHandler3>(EHExceptionRecord * pExcept=0x000000eca96fc8b0, unsigned __int64 * pRN=0x000000eca96fbc60, _CONTEXT * pContext=0x000000eca96fc3c0, _xDISPATCHER_CONTEXT * pDC=0x000000eca96fc240, const _s_FuncInfo * pFuncInfo=0x00007ffd7b2b7db0, int CatchDepth=0x00000000, unsigned __int64 * pMarkerRN=0x0000000000000000, unsigned char recursive='\0')
vcruntime140.dll!__CxxFrameHandler3(EHExceptionRecord * pExcept=0x000000eca96fc8b0, unsigned __int64 RN, _CONTEXT * pContext=0x000000eca96fc3c0, _xDISPATCHER_CONTEXT * pDC=0x000000eca96fc240)
ntdll.dll!RtlpExecuteHandlerForException()
ntdll.dll!RtlDispatchException()
ntdll.dll!KiUserExceptionDispatch()
KernelBase.dll!RaiseException()
vcruntime140.dll!_CxxThrowException(void * pExceptionObject=0x000000eca96fcc70, const _s__ThrowInfo * pThrowInfo)
Mso30win32client.dll!00007ffd7adff073()
... several more stack frames inside this DLL ...
... several more frames inside EXCEL.EXE ...
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()
и последние сообщения в окне вывода отладчика:
Exception thrown at 0x00007FFDAA9F9159 in EXCEL.EXE: Microsoft C++ exception: OException at memory location 0x000000ECA96FCC70.
Exception thrown at 0x00007FFD81D54C7D (Mso20win32client.dll) in EXCEL.EXE: 0xC0000005: Access violation writing location 0x0000000000000000.
Точные адреса, конечно, различаются, но адрес объекта OException
всегда содержит строку Failed to find IProtectionPolicyManagerStatics2
.
Обратите внимание, что это не первое выбрасываемое исключение, есть пара других OException
, которые были выброшены ранее (но указывают на другое строка, Invalid GUID string: f8cdef31-a31e-4b4a-93e4-5f571e91255a_1:live.com:000340010ECFACA9
), а также несколько Roaming::RoamingCacheException
с. Но они, кажется, обрабатываются нормально, в то время как этот не так.
Есть идеи о том, что может вызвать его и как можно обойти проблему?