Будьте осторожны, если несколько пользователей используют Symstore.exe напрямую для одного хранилища символов.В официальных документах Microsoft по этому вопросу звучит так, будто вы просто создаете общий ресурс и каждый обновляется с помощью программы SYMSTORE.EXE, поставляемой в составе средств отладки для Windows.В официальных документах рекомендуется делать это при каждой сборке.
И это прекрасно работает с отдельными пользователями или при передаче всех обновлений через одного человека, который обновляет сервер символов для команды.
К сожалению, «мелкий шрифт» в нижней части некоторых документов гласит, что только один пользователь, запустивший symstore.exe, может обновить общий сервер символов одновременно, не нарушая содержимое.
(Пример: на http://msdn.microsoft.com/en-us/library/ms681417(VS.85).aspx, Microsoft говорит: «Примечание. SymStore не поддерживает одновременные транзакции от нескольких пользователей. Рекомендуется назначить одного пользователя« администратором »хранилища символов и отвечать завсе операции добавления и удаления. ")
Таким образом, не существует встроенного механизма для сериализации обновлений в хранилище символов.Похоже, что множественные одновременные попытки обновить хранилище символов могут сломать хранилище символов и / или его индекс.
У нас не может быть сборок для всей нашей многомиллионной международной корпорации во всех часовых поясах, зависящей от координации действий одного человека в одном месте.
Основываясь на этих документах, я поднял эти вопросыс Microsoft в марте 2009 года;кто подтвердил, что это была возможная проблема.После этого обсуждения мы решили реализовать службу обновления символов, которая сериализует обновления с помощью прямых вызовов API средств отладки Windows SDK DbgEng.DLL SymbolSrvStoreFile (), чтобы никогда не было возможности двух одновременных обновлений для одной и той же области символов одновременно.,У пользователей есть действие построения, которое ставит их символы в очередь через службу вместо непосредственного обновления хранилища символов.Затем служба сериализует обновления, чтобы гарантировать, что истинные параллельные попытки обновления никогда не произойдут.
В то время доступная ограниченная документация по использованию SymSrvStoreFile была не очень ясна.Я получил это работает.Надеюсь, что это было улучшено с тех пор.в противном случае наиболее важной проблемой было то, что входной путь должен быть указан в формате, подобном _NT_SYMBOL_PATH.Таким образом, вместо того, чтобы, например, использовать «C: \ Data \ MyProject \ bin» в качестве входного пути, вместо этого вы должны указать «srv * C: \ Data \ MyProject \ bin».
Наш сервис теперь такжерегистрирует обновления через базу данных.База данных служит резервной копией для хранилища символов (на случай, если оно когда-нибудь испортится и должно быть восстановлено), а также создает точку отчетности, чтобы менеджеры и сотрудники службы поддержки знали, кто на самом деле сохраняет свои символы, а кто - нет.Мы генерируем еженедельный отчет о регистрации символов, который автоматически высылается заинтересованным сторонам.