Символы отладки Windows - не загружаются - PullRequest
6 голосов
/ 21 августа 2011

У меня Windows 7 x64 SP1. Я скачал символы из:

http://msdn.microsoft.com/en-us/windows/hardware/gg463028

Я скачал и установил x64 RTM и x64 SP1 для Windows 7 x64 SP1. Устанавливается в папку T:\Symbols.

Но когда я отлаживаю 64-битное собственное приложение C ++, символы вообще не загружаются. Например, для ntdll.dll PDB находятся в:

  • T:\Symbols\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12
  • T:\Symbols\ntdll.pdb\CFF40300FD804691B73E12CF2A150EE02

Но Visual Studio (2008/2010) не будет загружать символы. Во время отладки в представлении модулей я выбираю ntdll.dll и говорю Load Symbols From -> Symbol Path, укажите ntdll.pdb. Для обоих упомянутых путей всегда будет сказано:

В этой папке не найден соответствующий файл символов.

Я также добавил эту папку (T:\Symbols) в Debugging -> Options, но она все равно не будет загружать символы. Во время отладки кнопка Load All Symbols будет включена, и нажатие не приведет к загрузке символа!

Для 32-разрядных файлов имя файла PDB будет wntdll.pdb для ntdll.dll и будет храниться в папках с именами GUID в порядке, упомянутом выше. Но VS также не будет загружать символы для 32-битной отладки.

Довольно интересно (и разочаровывающе), когда я выбираю Load Symbols From -> Microsoft Symbols Server, он загружает и отлично загружает символы . Он загрузит символы в следующем месте (полный путь для ntdll):

enter image description here

\Users\...\AppData\Local\Temp\SymbolCache\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12

Здесь вы можете видеть, что GUID совпадает с папкой с именем GUID в пути T:\Symbols, но для установленных вручную символов VS жестко не загружает его!

Для NTDLL.PDB, несмотря на то, что соответствующая папка одинакова, а размер PDB также одинаков, отметка времени может отличаться.

Иногда VS также помещает символы в:

C:\...\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols

Если VS будет загружать правильные символы ТОЛЬКО с сервера Microsoft Symbols, то для чего использовать локально загруженные символы?

Мой вопрос в основном, как загрузить локально загруженные и установленные символы?

1 Ответ

11 голосов
/ 21 августа 2011

Ссылки для загрузки символов RTM или SP1 практически бесполезны.После каждого дня исправления вы будете получать измененный файл ntdll.dll или другие центральные библиотеки ОС.Это сделает ваши "старые" pdbs бесполезными.Поэтому вам необходимо загрузить их с серверов символов, чтобы быть в курсе последних новостей.

Но так как не все dll изменены, вам следует установить кэш загрузки вашего сервера символов в то же место, где вы распаковали загруженные символы.

Перейти к:

Инструменты - Параметры - Отладка - Символы

и задать путь для символов кэша в этом каталоге.

Загрузка всех символов означает, чтовы загружаете все символы для всех модулей, которые загружены в вашем текущем процессе.Но он не будет загружать все символы для всех библиотек, которые используются Windows.Если вы загрузите Windbg, вы получите инструмент symchk.exe, который позволяет рекурсивно загружать символы для всех двоичных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...