суббота, 1 ноября 2008 г.

Как правильно заполнять _NT_SYMBOL_PATH

На самом деле, переменная _NT_SYMBOL_PATH намного более многогранна, чем может показаться, это далеко не просто перечисление каталогов.

Там могут содержаться:
  • каталоги

  • ссылки на локальные кэши

  • ссылки на внешние символьные сервера

Когда-то файлы символов необходимо было загружать с сайта компании Microsoft или копировать их с дисков CD (еще остались люди, которые которые не только помнят эти времена, но и умели тогда грамотно пользоваться стандартными отладочными средствами?).
Сейчас Microsoft предоставляет выделенный интернет-сервер символьных файлов и отладчик, например, WinDbg может загружать файлы PDB автоматически (правда, это может и отладчик любой версии Visual Studio).
Нам только нужно ввести адрес этого сервера в диалоге File|Symbol File Path… и выделить checkbox Reload.

Содержимое _NT_SYMBOL_PATH : SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Если мы не помним этот адрес, и мы первый раз запускаем WinDbg на новом компьютере, мы можем выполнить следующую .symfix для автоматической установки пути к серверу и задать место на диске для сохранения загруженных файлов.
Мы также можем проверить текущие пути поиска и загрузки символьных файлов путём выполнения команды .sympath.
После изменения пути поиска или адреса загрузки необходимо явно перезагрузить файлы символов путем выполнения команды .reload:

0:000> .symfix
No downstream store given, using C:\Program Files\Debugging Tools for Windows\sym

0:000> .sympath
Symbol search path is: SRV**http://msdl.microsoft.com/download/symbols

0:000> .symfix c:\symbols

0:000> .sympath
Symbol search path is: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

0:000> .reload


Очень важный момент: чтобы не терять время впустую, можно кэшировать локально символы из удаленных папок с "плоским" набором .pdb-файлов.
Достигается это такой строкой:

cache*C:\symbols;SRV*C:\symbols*http://msdl.microsoft.com/download/symbols;\\host\foo\build1234


Upd: Чуть не забыл, на самом деле, для интересующихся, есть еще переменная окружения _NT_ALT_SYMBOL_PATH, которую отладчики и DbgHelp просматривают в поисках путей к символам первой.
Например, ее можно использовать для указания путей к символам в каких-то конкретных ситуациях, храня основной путь в неизменном виде.

Комментариев нет: