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

У меня 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):

\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 ответ

Решение

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

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

Идти к:

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

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

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

Другие вопросы по тегам