Как правильно заполнять _NT_SYMBOL_PATH Nov 01, 2008

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

Там могут содержаться: - каталоги - ссылки на локальные кэши - ссылки на внешние символьные серверы

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

Содержимое _NT_SYMBOL_PATH : SRVc:\symbolshttp://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 просматривают в поисках путей к символам первой. Например, ее можно использовать для указания путей к символам в каких-то конкретных ситуациях, храня основной путь в неизменном виде.