Как стать автором
Обновить

Debugging: Развертывание сервера отладочной информации

Время на прочтение6 мин
Количество просмотров8.6K
Копая залежи документов на своем рабочем компе обнаружил инструкцию по развертыванию сервера отладочной информации, которую писал два-три года назад. Попробую представить её хабросообществу. Данная инструкция будет полезна C++ разработчикам под Windows, которые хотят использовать отладку релизных версий своего продукта (удаленно и напрямую, на своих компах и компах тестировщиков), а также делать разбор крашдампов (postmortem debugging).


Развертывание хранилища отладочной информации



1. Подготовка окружения

Для развертывания хранилища отладочных сиволов понадобится:
  1. Компьютер с доступом в интернет (не важно прямым или через proxy), операционной системой Window 2003 Server или Windows XP Pro, веб сервером Internet Information Services
  2. Дистрибутив Debugging Tools For Windows. Дистрибутив можно взять с сайта: www.microsoft.com/whdc/DevTools/Debugging/default.mspx, версию x86 или x64
  3. Дистрибутивы символов операционных систем. Дистрибутивы можно взять с сайта: www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx
  4. Дистрибутив прокси-сервера (в случае прямого доступа в интернет)

Следует установить дистрибутив Debugging Tools For Windows (будем считать, что дистрибутив установлен в папку “C:\Program Files\Debugging Tools For Windows”), и установить все дистрибутивы отладочных символов операционных систем в какую либо папку (будем считать, что они установлены в папку “C:\TempSymbols”).

2. Организация хранилища отладочной информации

Хранилище символов будем организовывать используя сервер отладочной информации symsrv.dll компании Microsoft. Для этого создадим папку для хранилища символов, например C:\Symbols. Далее следует установить на неё права на чтение для любых пользователей компьютера.
Следующим шагом станет добавление файлов отладочных символов в хранилище. Для этого используем программу “symstore.exe” из комплекта Debugging Tools For Windows. Выполним следующую команду:
symstore add /r /3 /f c:\TempSymbols\*.* /s c:\Symbols /compress
данная команда пройдет по всем вложеным папкам каталога “c:\TempSymbols” и скопирует оттуда бинарные файлы и файлы с отладочной информацией в трёхуровневое хранилище символов расположенное в папку “C:\Symbols”. Архивирует их и создаст индексные файлы для ускорения доступа и хранения информации о транзакциях доступа на изменение хранилища.
Описание ключей этой команды:
  • add – добавить файлы в хранилище.
  • /r – рекурсивно обходить папку с файлами символов.
  • /3 – организовывать трёхуровневое хранилище (для ускорения доступа к файлам)
  • /f [path] – путь к файлам добавляемым в хранилище.
  • /s [path] – путь к хранилищу.
  • /compress – создавать архивированное хранилище (для сбережения дискового пространства)

Команда будет выполнятся достаточно долго и результатом её выполнения будет создание хранилища отладочной информации в папке “C:\Symbols”. После данного этапа папку “C:\TempSymbols” можно удалить.

3. Организация доступа к хранилищу отладочной информации через протокол http

На данном этапе следует настроить Internet Information Services на предоставление доступа к хранилищу. Вначале следует создать виртуальную папку:
  1. Откроем “Start->Administrative Tools->Internet Information Services (IIS) Manager”.
  2. Развернем папку”Web Sites”.
  3. В контекстном меню элемента “Default Web Site “выберем пункт “New->Virtual Directory…”
  4. В окне приветствия щелкнем “Next”.
  5. В поле “Alias” введём “ Symbols” и нажмем кнопку “Next”.
  6. В поле “Path” введём “C:\Symbols” и нажмем кнопку “Next”.
  7. Уберём галочку с поля “Run scripts” и “Browse”.
  8. Нажмем кнопку “Next” и “Finish”.

Далее следует настроить типы MIME.
  1. В контектстном меню виртуальной папку “Symbols” выберем пунт “Properties”.
  2. Выберем вкладку “HTTP Headers”.
  3. Щёлкнем кнопку “MIME Types”.
  4. Щелкнем кнопку “Next”.
  5. В поле “Extension” введём “*”.
  6. В поле “Mime type” введём “application/octet-stream”.
  7. Щелкнем кнопку “Ok” чтобы выйти из окна “MIME Types”.
  8. Щелкнем кнопку “Ok” чтобы выйти из окна “Properties”.

4. Инсталляция прокси-фильтра для обновления символов через интернет

Прокси-фильтр нужен для того чтобы отладчик не нешедший необходимые ему файлы отладочных символов попытался взять из из публичного хранилища Microsoft, тем самым выполнив обновление хранилища символов.
Прокси фильтр предоставляемый компанией Microsoft в наборе Debugging Tools For Windows является ISAPI расширением и находится в каталоге “C:\Program Files\Debugging Tools For Windows\symproxy”.
Установим прокси фильтр:
  1. Скопируем из каталога “C:\Program Files\Debugging Tools For Windows\symproxy” файлы “symproxy.dll “и “symsrv.dll“ в папку “%WINDIR%\system32\inetsrv”.
  2. Создадим пустой файл “%WINDIR%\system32\inetsrv\symget.yes”.
  3. Внесём данные из файла “С:\Program Files\Debugging Tools For Windows\symproxy\symproxy.reg” в реестр.
  4. Зайдем в редактор реестра и найдем ключ “HKLM/Software/Microsoft/Symbol Server Proxy/Web Directories/symbols”.
  5. Изменим значение “SymbolPath” на “C:\symbols;http://msdl.microsoft.com/download/symbols”.
  6. Далее зарегистрируем прокси-фильтр как источник событий создав ключ реестра “HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\SymProxy” и добавив туда REG_EXPAND_SZ значение с именем “EventMessageFilter” и значением “%WINDIR%\system32\inetsrv\symproxy.dll”.

Настроим IIS на работу с прокси-фильтром:
  1. Откроем “Start->Administrative Tools->Internet Information Services (IIS) Manager”.
  2. В контекстном меню элемента “Application Pools выберем New->Application Pool”.
  3. В поле “Application ID” введём “SymSrv Pool”. И нажмем Ok.
  4. В контекстном меню элемента “SymSrv Pool” выберем пункт “Properties”.
  5. Выберем вкладку “Identity”, выберем радио-кнопку “Predefined” и в комбо-боксе выберем пункт “Network Service” и нажмем Ok.
  6. Развернем ветку “Web Sites->Default Web Site”.
  7. В контекстном меню элемента “Symbols” выберем пункт “Properties”.
  8. На вкладке “Virtual Directory” нажмем кнопку “Create”.
  9. В комбо-боксе “Application Pool” выберем “SymSrv Pool” и нажмем Ok.
  10. В контекстном меню “Default Web Site” выберем пункт “Properties”.
  11. Выберем вкладку “ISAPI Filters” и нажмем кнопку “Add”.
  12. В поле “Filter Name” напишем “SymProxy”, в поле “Executable” введем “%WINDIR%\system32\inetsrv\symproxy.dll”.
  13. Нажмем “Ok” чтобы закрыть окно “Filter Properties”.
  14. Нажмем “Ok” чтобы закрыть окно “Default Web Site Properties”.

Запустим файл “iisreset.exe” чтобы рестартовать IIS с новыми настройками.

5. Настройка параметров прокси сервера для symproxy.dll

В Debugging Tools For Windows есть недочет, связанный с тем, что “symproxy.dll” не перенаправляет вызовы на получение сжатых файлов отладочных символов на сайт Microsoft если “symproxy.dll” работает с интернетом напрямую (без прокси сервера). Для того чтобы устранить данный дефект необходимо поставить локальный прокси сервер и с помощью утилиты “proxycfg.exe” настроить систему на работу с прокси сервером.

6. Настройка клиентских компьютеров на работу с сервером отладочной информации

На каждом клиентском компьютере (компьютере разработчика) следует создать папку для кеширования символов, например “C:\LocalSymbols”. Установить дистрибутив Debugging Tools For Windows и создать переменные окружения:
_NT_SYMBOL_PATH=srv*[local_repository]*http://[symbol_server_ip]/symbols
_NT_IMAGE_PATH=srv*[local_repository]*http://[symbol_server_ip]/symbols

Где:
  • [local_repository] – это локальный кеш символов, например “C:\Symbols”.
  • [symbol_server_ip] – IP адрес или доменное имя корпоративного сервера отладочной информации.

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

Резюме

Итак, опишу полученый результат. У нас теперь есть сервер, на котором находятся отладочные символы операционных систем и некоторых библиотек и продуктов Microsoft. При этом если идет к серверу обращение на получение символов какой-то новой версии софта, то этот запрос будет переадресован на сайт Microsoft, символы будут скачаны оттуда и лягут на ваш сервер. На компьютерах девелоперов у вас будет организован локальный репозиторий символов, которые будут скачиваться с вашего сервера символов по требованию отладчика (Visual Studio, WinDbg и т.п.). Для полноты работы символьного сервера вам остается только добавить в вашу систему сборки:
  • настройку создания файлов отладочной информации (*.pdb)
  • вызов «symstore» для того чтобы отладочная информация о ваших компонентах и сами компоненты попали на ваш сервер.

Заключение

Данная инструкция, как я и говорил, была написана 2-3 года назад, поэтому там фигурирует компьютер с Win2003, думаю вам не составит труда по аналогии развернуть сервер символов на Win2008 и последней версии IIS. Да и виртуалки, на которой можно было бы снять скриншоты настроки, тоже не оказалось. Но описание достаточно детальное, поэтому думаю что вы разберетесь.
Возможно проблема описанная в пункте 5 уже не актуальна, я не проверял.
Более детальную информацию по работе с серверами отладочной информации можно почерпнуть их хелп файла Debugging Tools For Windows, для затравки скажу что ещё можно привязать ваш сервер отладочной информации с сервером хранения исходников, и тогда при разборе крашдампа вы сможете видеть не только стек падения программы, но и место в исходниках, валидных на момент сборки.
Теги:
Хабы:
+13
Комментарии3

Публикации