Настройка публичного (или частного) сервера символов через http - PullRequest
22 голосов
/ 12 марта 2011

Каждый фрагмент документации, который я нашел (ссылки с 1 по 5), говорит о настройке сервера символов с помощью общего пути UNC, а затем о предоставлении правильных настроек, доступных локальному экземпляру отладчика (будь то _NT_SYMBOL_PATH или Visual Studio Настройки отладки IDE).

Microsoft предоставляет сервер символов (ссылка 6), доступный через http для своих общедоступных хранилищ символов.

Я хочу создать для своего кода сервер символов, доступный по протоколу http, а не через общий доступ к файлам UNC. Люди Mozilla, кажется, сделали это (ссылка 7), но это больше не работает.

Есть ли лучшие ссылки для выполнения этой задачи, чем я нашел до сих пор?


Ссылки

  1. https://msdn.microsoft.com/en-us/library/b8ttk8zy(v=vs.80).aspx
  2. http://msdn.microsoft.com/en-us/library/ms680693(v=vs.85).aspx
  3. http://stackhash.com/blog/post/Setting-up-a-Symbol-Server.aspx
  4. http://entland.homelinux.com/blog/2006/07/06/
  5. http://msdn.microsoft.com/en-us/windows/hardware/gg462988
  6. http://support.microsoft.com/kb/311503
  7. http://developer.mozilla.org/en/Using_the_Mozilla_symbol_server

Ответы [ 4 ]

14 голосов
/ 30 марта 2011

Я считаю, что ответ очень прост: «Просто поделитесь каталогом по какому-то http-пути».Согласно записи Чеда Остина "Создание вашего собственного сервера символов" , это будет просто работать.

Другими словами, каталог, который symstore.exe использует для хранения символов, когда он обслуживается.как http://symbols.example.com/public_symbols/, будет использоваться в качестве целевого сервера символов для средств отладки Windows.

12 голосов
/ 23 марта 2012

Будьте осторожны, если несколько пользователей используют 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».

Наш сервис теперь такжерегистрирует обновления через базу данных.База данных служит резервной копией для хранилища символов (на случай, если оно когда-нибудь испортится и должно быть восстановлено), а также создает точку отчетности, чтобы менеджеры и сотрудники службы поддержки знали, кто на самом деле сохраняет свои символы, а кто - нет.Мы генерируем еженедельный отчет о регистрации символов, который автоматически высылается заинтересованным сторонам.

5 голосов
/ 12 мая 2014

Сервер символов, обслуживаемый по протоколу HTTP, имеет ту же структуру, что и сервер символов, обслуживаемый по пути к файлу UNC, поэтому проще всего будет использовать symstore.exe для хранения файлов в папке где-нибудь, а затем использовать простой HTTP-сервер, который предоставляет эту папку через HTTP (даже с python -m SimpleHTTPServer в символах dir будет работать).

Небольшая ошибка в том, что если файл символов не существует, HTTP-сервер должен вернуть код ошибки 404 (по крайней мере, протестирован в Visual Studio 2013). Я столкнулся с проблемой, когда HTTP-сервер, возвращающий 403 за отсутствующие файлы, заставил Visual Studio перестать делать запросы после первого неудачного запроса.

symstore.exe создает несколько вспомогательных файлов и папок (папка 000Admin/, файлы refs.ptr и files.ptr). Ничего из этого не требуется для работы сервера символов.

Если вы хотите создать хранилище символов без использования symstore.exe, вы можете загрузить файлы со следующей структурой:

BinaryName.pdb/$BUILD_ID/BinaryName.pdb BinaryName.exe/$LINK_ID/BinaryName.exe

Где BUILD_ID - это GUID, встроенный в файл и исполняемый файл PDB, а LINK_ID - это комбинация метки времени сборки и размера файла в исполняемом файле. Их можно получить, прочитав выходные данные инструмента dump_syms.exe из библиотеки breakpad. Смотри http://www.chromium.org/developers/decoding-crash-dumps

5 голосов
/ 14 июня 2013

Наш (Mozilla) сервер символов работает нормально, AFAICT.Мы не делаем ничего особенно сложного, мы просто помещаем файлы PDB в правильную структуру каталогов (у нас есть скрипт для этого , но вы можете использовать symstore.exe) и подаете его через Apache.Я думаю, что единственное, что у нас есть, это некоторые правила перезаписи, позволяющие получать доступ к файлам без учета регистра, потому что инструменты Microsoft действительно противоречивы в отношении имени файла / GUID.

...