Cra sh при запуске Microsoft Excel 2016 под удаленным отладчиком MSVS - PullRequest
0 голосов
/ 10 марта 2020

Я сталкиваюсь со странной проблемой при попытке запустить 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 с. Но они, кажется, обрабатываются нормально, в то время как этот не так.

Есть идеи о том, что может вызвать его и как можно обойти проблему?

...