У меня есть смешанное приложение C ++ / CLI, которое использует WPF.О сбоях наших клиентов сообщается как мини-дампы на наш собственный сервер.
Когда я пытаюсь исследовать мини-дамп с помощью команд! Pe или! Clrstack из sos-расширения windbg, я часто получаю неполную информацию о кадрах стека отСборки WPF, например
SP IP Function
0013E370 564618E3 PresentationFramework_ni!Unknown+0x1bf
0013E3A4 56461258 PresentationFramework_ni!Unknown+0x58
0013E3CC 5634C6D8 PresentationFramework_ni!Unknown+0x18
0013E3D8 55C04AA2 PresentationFramework_ni!Unknown+0x502
...
Декодирование трассировки стека в этом случае также становится очень медленным.
Использование! Sym noisy показывает множество сообщений из
SYMSRV: C:\Symbols\PresentationFramework.ni.dll\488F142Edab000\PresentationFramework.ni.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/PresentationFramework.ni.dll/488F142Edab000/PresentationFramework.ni.dll not found
DBGHELP: C:\Program Files (x86)\Debugging Tools for Windows (x86)\PresentationFramework.ni.dll - file not found
DBGHELP: PresentationFramework.ni.dll not found in c:\Windows\System32
SYMSRV: C:\Symbols\PresentationFramework.ni.dll\488F142Edab000\PresentationFramework.ni.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/PresentationFramework.ni.dll/488F142Edab000/PresentationFramework.ni.dll not found
DBGENG: C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\PresentationFramewo#\9519494798a88867406b5755e1dbded6\PresentationFramework.ni.dll - Couldn't map image from disk.
SYMSRV: C:\Symbols\PresentationFramework.dll\488F142E50e000\PresentationFramework.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/PresentationFramework.dll/488F142E50e000/PresentationFramework.dll not found
DBGHELP: C:\Program Files (x86)\Debugging Tools for Windows (x86)\PresentationFramework.dll - file not found
DBGHELP: PresentationFramework.dll not found in c:\Windows\System32
SYMSRV: C:\Symbols\PresentationFramework.dll\488F142E50e000\PresentationFramework.dll not found
SYMSRV: http://msdl.microsoft.com/download/symbols/PresentationFramework.dll/488F142E50e000/PresentationFramework.dll not found
DBGENG: C:\WINDOWS\assembly\GAC_MSIL\PresentationFramework\3.0.0.0__31bf3856ad364e35\PresentationFramework.dll image header does not match memory image header.
DBGENG: C:\WINDOWS\assembly\GAC_MSIL\PresentationFramework\3.0.0.0__31bf3856ad364e35\PresentationFramework.dll - Couldn't map image from disk.
:
Я использовал
c: \ Windows \ System32; SRV * C: \ Symbols *http://msdl.microsoft.com/download/symbols
в качестве символа windbg и пути к изображению.
Насколько я знаюПонятно, что это происходит только для собственных образов .NET, если машина, на которой произошел сбой, и машина с отладчиком отличаются с точки зрения версии Windows и версии SP .NET.Я видел это в основном для собственных изображений WPF.
Что я могу сделать, чтобы избежать этой проблемы?
Обновление до моего первоначального вопроса:
Iзабыл упомянуть, что я боролся с подобной проблемой с различными версиями mscordacwks dll.Чтобы использовать SOS, на компьютере, выполняющем отладку, требуется версия mscordacwks.dll, используемая на аварийном компьютере.Поэтому я начал собирать различные версии этой DLL из разных комбинаций Windows и SP и помещать их на наш собственный сервер символов.Это довольно неловко, конечно, и даже более того, потому что их нужно называть в соответствии со специальным соглашением (например, mscordacwks_x86_x86_2.0.50727.4952.dll).
Если я правильно понимаю ответ Рика снизу, я долженсделать что-то подобное для родных образов сборок .NET, на которые мы ссылаемся.Я пробовал это вручную с одним примером (WindowsBase.ni.dll), но я не мог легко сохранить эту DLL на нашем сервере символов.Кажется, что родные изображения не поняты в symstore.Сообщение об ошибке из symstore:
SYMSTORE MESSAGE: Skipping file .\WindowsBase.ni.dll - not a known file type.
Поэтому я попытался поместить его в дополнительный каталог и добавить в путь к своему символу или изображению, а затем SOS правильно декодировал кадры WindowsBase_ni.
Но все это похоже на большую раздражающую ручную настройку: получение всех собственных образов для различных версий .NET (как насчет SP и обновлений безопасности), настройка отладчика вручную, потому что symstore не может быть использован, ...
Это действительно единственный способ?
Вероятно, это не такая проблема, если вы можете контролировать среду своих клиентов.Но это похоже на кошмарный отладочный кошмар для организаций, которые создают смешанные приложения для больших пользовательских баз.