Является ли документация для WinDbg SRV * неправильной?

документация говорит:

Если вы включите строку srv * в путь символов, отладчик использует
сервер символов для получения символов из хранилища символов по умолчанию. За
Например, следующая команда говорит отладчику использовать символ
сервер для получения символов из хранилища символов по умолчанию. Эти символы
не кэшируется на локальном компьютере
.

.Симпатия SRV *

Однако то, что я нашел, это символы являются кэшируются.

Я использую WinDbg 10 и файлы кеша по умолчанию, кажется, созданы в C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym Когда я удаляю их и запускаю исполняемый файл с путем, установленным в srv* символы загружены здесь.

Так что документация не так?

8

Решение

Да, документация неверна (по крайней мере для WinDbg 6.2.9200.16384).

Вы можете доказать это, введя упомянутую команду:

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

Итак, как мы видим из вывода WinDbg, расширенный путь к символам (который будет фактически использоваться) содержит cache* что указывает на то, что символы будут кэшироваться.

Вы нашли это в документация для WinDbg, что может быть неправильным местом для определения поведения, поскольку WinDbg не загружает символы самостоятельно. Вместо этого он использует dbghelp.dll и поведение этой DLL может измениться без обновления справки WinDbg.


К синтаксису пути символа действительно трудно привыкнуть, и документация распространяется повсеместно. Вся магия с расширениями и каталогами по умолчанию делает его еще хуже.

Поток более или менее:

  1. Разбить путь символа на «;» в массив элементы.
  2. Для каждого элемент в элементы:
    1. Переключаться в соответствии с началом элемент:
      1. «Кэш *»:
        1. Определить путь к кешу:
          1. Если после звездочки есть путь, используйте этот путь.

            В противном случае используйте путь кеша по умолчанию.
          2. Символ кэша из всех следующих элементна этом пути.
      2. «Symsrv *»:
        1. Трещина элемент на «*» в (в основном пути) компонентов.
        2. Первый компонент — это DLL-библиотека сервера символов.
        3. Следующие компоненты — пути. Для каждого дорожка:
          1. Ищите символ в дорожка. Путь может быть одним из
            • Локальный каталог.
            • UNC.
            • HTTP или HTTPS URL — должен быть последним путем.
            • Пустая строка — означает хранилище символов по умолчанию. (Увидеть SymSetHomeDirectory а также !homedir.)
          2. Если найдено:
            1. Скопировать символ в все предыдущий дорожкав этом элемент.
            2. Завершить поиск символа
      3. «SRV *»:
        • То же, что «symsrv * symsrv.dll *».
      4. Иначе:
        1. Лечить элемент как путь и искать символ там. (Без хэша и т. Д., Как это делается symsrv.dll.)
6

Другие решения

Если вы используете специальный cache*path знак в вашем пути символов WinDbg WinDbg будет кэшировать символы из источников, следующих за этим токеном. Также можно написать srv*localpath*serverpath кэшировать символы из serverpath в localpath, Если вы не хотите кэшировать, убедитесь, что ваш .sympath не включает это

Кроме того, может быть, стоит проверить, эффективно ли кэшируются символы (извлекаются один раз, многократно используются много раз) или просто сохраняются там для этого запуска WinDbg (извлекаются один раз за сеанс).

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector