WinDbg занимает очень много времени для загрузки символов; ищет каждый каталог в большой сети UNC символьное хранилище

Я провел несколько дней, пытаясь ускорить загрузку символов при отладке аварийных дампов с помощьюWinDbgи я не могу обойти конкретную проблему.

Проблема в том, что когда символы для модуля в дампе не существуют ни в одном доступном хранилище символов или в расположении сервера символов (например, это сторонние модули без доступных символов), WinDbg будет тратить буквально часы на их поиск.

Я правильно установил путь к символам, чтобы правильно установить порядок поиска и каталоги кеша:

.sympath cache*C:\SymbolCache1;\\our.corp\SymbolStore;SRV*C:\SymbolCache2*http://msdl.microsoft.com/download/symbols

Работает с!sym noisy а также.reload /f Я могу видеть:

SYMSRV:  Notifies the client application that a proxy has been detected. 
SYMSRV:  Connecting to the Server: http://msdl.microsoft.com/download/symbols. 
SYMSRV:  Successfully connected to the Server. 
SYMSRV:  Sending the information request to the server. 
SYMSRV:  Successfully sent the information request to the server. 
SYMSRV:  Waiting for the server to respond to a request. 
SYMSRV:  Successfully received a response from the server. 
SYMSRV:  Closing the connection to the Server. 
SYMSRV:  Successfully closed the connection to the Server. 
SYMSRV:  c:\SymbolCache1\Some3rdParty.dll\0060D200cd1000\Some3rdParty.dll not found 
SYMSRV:  c:\SymbolCache2\Some3rdParty.dll\0060D200cd1000\Some3rdParty.dll not found 
SYMSRV:  http://msdl.microsoft.com/download/symbols/Some3rdParty.dll/0060D200cd1000/Some3rdParty.dll not found 
<---- !!!! hanging here with *BUSY* showing in WinDbg

ЗапустивМонитор процесса в тот момент, когда он зависает, я вижу, что WinDbg ищет то, что кажетсякаждый каталог в нашем гигантском сетевом хранилище символов (\ our.corp \ SymbolStore) ищем символы, даже в каталогах для модулей, которые явно не связаны.

Что странно, так это то, что в WinDbg вы можете видеть, что он извлекает временную метку модуля (0060D200cd1000) и использует ее для поиска ожидаемого расположения в локальных каталогах и на сервере символов MS. Я не могу понять, почему он делает полное сканирование нашего (массивного) сетевого хранилища символов. Возможно, есть что-то уникальное в том, как он обрабатывает пути UNC?

Этот поиск может занять 15 минут или более для каждого символа, и если в дампе много пропущенных символов, это может вызвать!analyze -v займет несколько часов (если вы используете интеграцию WinDbg с Visual Studio, это приводит к зависанию сразу после загрузки аварийного дампа, поскольку по какой-то причине интеграция пытается загрузить все символы сразу, несмотря на.symopt Настройки).

Эта проблема также легко воспроизводима, если вы пытаетесь загрузить символы для несуществующего имени готового модуля, например,.reload /f bogus.dll.

Вот мои настройки WinDbg .symopt:

0:000> .symopt
Symbol options are 0x30337:
  0x00000001 - SYMOPT_CASE_INSENSITIVE
  0x00000002 - SYMOPT_UNDNAME
  0x00000004 - SYMOPT_DEFERRED_LOADS
  0x00000010 - SYMOPT_LOAD_LINES
  0x00000020 - SYMOPT_OMAP_FIND_NEAREST
  0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
  0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
  0x00010000 - SYMOPT_AUTO_PUBLICS
  0x00020000 - SYMOPT_NO_IMAGE_SEARCH

Я огляделся и подумал, что должен быть какой-то флаг, чтобы контролировать это, но я не могу его найти.

Пара вещей:

Это не проблема со скоростью сети или отсутствием локального кэша символов. Проблема возникает только с символами, которые не могут быть найдены, и только с хранилищем символов UNC (например, не с сервером символов Microsoft)Я уже пробовал SYMOPT_NO_PUBLICS вместо SYMOPT_AUTO_PUBLICSЯ подтвердил, что мой путь к символу - это то, что я ожидаю, используяsympath команда. Я также пытался использовать_NT_SYMBOL_PATH переменная окружения вместо.Я знаю, что могу исключить определенные символы через файл конфигурации, но это нереализуемое решение, потому что иногда отсутствующее имя символа заранее неизвестноЯ видел, что у кого-то еще в Интернете была такая же проблема, и упоминал об этом на форуме Microsoft в посте под названием "Низкая производительность WinDbg 6.11.1.404, когда он указывает на большой символьный кеш"но не получил никакой помощи.

Ответы на вопрос(2)

Ваш ответ на вопрос