Символы отладки Microsoft Windows, что это за программа

Обновлено: 01.07.2024

Файлы базы данных программы (.pdb), также называемые файлами символов, сопоставляют идентификаторы и операторы в исходном коде вашего проекта с соответствующими идентификаторами и инструкциями в скомпилированных приложениях. Эти файлы сопоставления связывают отладчик с исходным кодом, что позволяет выполнять отладку.

При сборке проекта из интегрированной среды разработки Visual Studio со стандартной конфигурацией сборки отладки компилятор создает соответствующие файлы символов. В этой статье описывается, как управлять файлами символов в среде IDE, например:

Для получения подробной информации о файлах символов см. следующее:

Как работают файлы символов

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

  • Имя исходного файла и номер строки для отображения в интегрированной среде разработки Visual Studio.
  • Где в приложении остановиться для точки останова.

Файлы символов также показывают расположение исходных файлов и, при необходимости, сервер, с которого их можно получить.

Отладчик загружает только те файлы .pdb, которые точно соответствуют файлам .pdb, созданным при сборке приложения (то есть исходному .pdb файлы или копии). Это точное дублирование необходимо, потому что макет приложений может измениться, даже если сам код не изменился. Дополнительные сведения см. в разделе Почему Visual Studio требует, чтобы файлы символов отладчика точно соответствовали двоичным файлам, с помощью которых они были созданы?

Для отладки кода вне исходного кода вашего проекта, например кода Windows или стороннего кода, который вызывает ваш проект, необходимо указать расположение файлов .pdb внешнего кода (и, при необходимости, исходный код файлы), которые должны точно соответствовать сборкам в вашем приложении.

Где отладчик ищет символы

При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов, которые он может найти по умолчанию.

При отладке управляемого кода на удаленном устройстве все файлы символов должны располагаться либо на локальном компьютере, либо в месте, указанном в параметрах отладчика.

Отладчик ищет файлы символов в следующих местах:

Папка проекта.

Расположение, указанное внутри библиотеки DLL или исполняемого файла (.exe).

По умолчанию, если вы создали DLL или файл .exe на своем компьютере, компоновщик помещает полный путь и имя связанного файла .pdb в файл DLL или .exe. Отладчик проверяет, существует ли файл символов в этом месте.

Та же папка, что и файл DLL или .exe.

Любые местоположения, указанные в параметрах отладчика для файлов символов. Сведения о добавлении и включении местоположений символов см. в разделе Настройка местоположений символов и параметров загрузки.

Любая локальная папка кэша символов.

Указанные сетевые, интернет- или локальные серверы символов и местоположения, например серверы символов Microsoft, если они выбраны. Visual Studio может загружать файлы символов отладки с серверов символов, реализующих протокол symsrv. Visual Studio Team Foundation Server и средства отладки для Windows — это два инструмента, которые могут использовать серверы символов.

Серверы символов, которые вы можете использовать, включают:

Серверы символов во внутренней сети или на вашем локальном компьютере: ваша команда или компания могут создавать серверы символов для собственных продуктов и в качестве кэша для символов из внешних источников. У вас может быть сервер символов на вашем собственном компьютере.

Сторонние серверы символов. Сторонние поставщики приложений и библиотек для Windows могут предоставлять доступ к серверу символов через Интернет.

Если вы используете сервер символов, отличный от общедоступных серверов символов Microsoft, убедитесь, что сервер символов и его путь заслуживают доверия. Поскольку файлы символов могут содержать произвольный исполняемый код, вы можете подвергаться угрозам безопасности.

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

По умолчанию отладчик проверяет наличие символов в различных местах. См. раздел Где отладчик ищет символы.

На странице Инструменты > Параметры > Отладка > Символы вы можете:

  • Укажите и выберите пути поиска файлов символов.
  • Укажите серверы символов для компонентов Microsoft, Windows или сторонних производителей.
  • Укажите модули, для которых вы хотите или не хотите, чтобы отладчик автоматически загружал символы.
  • Изменяйте эти параметры во время активной отладки. См. раздел Загрузка символов во время отладки.

Чтобы указать расположение символов и параметры загрузки:

В Visual Studio откройте Инструменты > Параметры > Отладка > Символы (или Отладка > Параметры > Символы).

В разделе Расположение файлов символов (.pdb)

Чтобы добавить новое местоположение сервера символов,

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

Выполняется поиск только в указанной папке. Вы должны добавить записи для всех подпапок, в которых вы хотите искать.

Чтобы добавить новое местоположение сервера символов VSTS,

Чтобы изменить порядок загрузки символов, используйте Ctrl+Up и Ctrl+Down или значки со стрелками вверх и вниз.

Чтобы изменить URL-адрес или путь, дважды щелкните запись или выберите ее и нажмите F2.

Чтобы удалить запись, выберите ее, а затем выберите значок -.

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

Не помещайте локальный кэш символов в защищенную папку, например C:\Windows, или во вложенную папку. Вместо этого используйте папку для чтения и записи.

Для проектов C++, если у вас установлена ​​переменная среды _NT_SYMBOL_PATH, она переопределит значение, установленное в символах кэша в этом каталоге.

Укажите модули, которые вы хотите, чтобы отладчик загружал из файлов символов (.pdb) при запуске.

Выберите Загрузить все модули, если они не исключены (по умолчанию), чтобы загрузить все символы для всех модулей в местоположении файла символов, за исключением специально исключенных модулей. Чтобы исключить определенные модули, выберите Указать исключенные модули, выберите значок +, введите имена исключаемых модулей и нажмите кнопку ОК.

Чтобы загружать только указанные вами модули из расположений файлов символов, выберите Загружать только указанные модули. Выберите Указать включенные модули, щелкните значок +, введите имена модулей, которые необходимо включить, а затем нажмите кнопку ОК. Файлы символов для других модулей не загружены.

Выберите ОК.

Другие варианты символов для отладки

Вы можете выбрать дополнительные параметры символа в Инструменты > Параметры > Отладка > Общие (или Отладка > Параметры > Общие):

Загрузить экспорт DLL (только собственный)

Загружает таблицы экспорта DLL для C/C++. Дополнительные сведения см. в разделе Таблицы экспорта DLL. Чтение информации об экспорте DLL связано с некоторыми накладными расходами, поэтому загрузка экспортных таблиц по умолчанию отключена. Вы также можете использовать dumpbin /exports в командной строке сборки C/C++.

Включить отладку на уровне адреса и Показать дизассемблирование, если исходный код недоступен

Всегда показывает разборку, если исходные файлы или файлы символов не найдены.

 Параметры/Отладка/Общие параметры дизассемблирования

Включить поддержку исходного сервера

Использует исходный сервер для отладки приложения, если на локальном компьютере нет исходного кода или файл .pdb не соответствует исходному коду. Исходный сервер принимает запросы на файлы и возвращает фактические файлы из системы управления версиями. Исходный сервер запускается с помощью библиотеки DLL с именем srcsrv.dll для чтения файла .pdb приложения. Файл .pdb содержит указатели на репозиторий исходного кода, а также команды, используемые для извлечения исходного кода из репозитория.

Вы можете ограничить команды, которые srcsrv.dll может выполнять из файла приложения .pdb, перечислив разрешенные команды в файле с именем srcsrv.ini< /эм>. Поместите файл srcsrv.ini в ту же папку, что и srcsrv.dll и devenv.exe.

Произвольные команды могут быть встроены в файл .pdb приложения, поэтому обязательно поместите в файл srcsrv.ini только те команды, которые вы хотите выполнить. Любая попытка выполнить команду, отсутствующую в файле srcsvr.ini, приведет к появлению диалогового окна подтверждения. Дополнительные сведения см. в разделе Предупреждение системы безопасности: отладчик должен выполнить ненадежную команду.

Проверка параметров команды не выполняется, поэтому будьте осторожны с доверенными командами. Например, если вы указали cmd.exe в файле srcsrv.ini, злоумышленник может указать параметры cmd.exe, которые сделают его опасно.

Выберите этот элемент и нужные дочерние элементы. Разрешить исходному серверу сборки с частичным доверием (только для управляемых) и всегда выполнять команды ненадежного исходного сервера без запроса могут увеличить риски безопасности.

 Включить параметры исходного сервера

Параметры символа компилятора

При сборке проекта из интегрированной среды разработки Visual Studio со стандартной конфигурацией сборки отладки C++ и управляемые компиляторы создают соответствующие файлы символов для вашего кода. Вы также можете установить параметры компилятора в коде.

Чтобы задать параметры компилятора для конфигураций сборки в Visual Studio, см. статью Установка конфигураций отладки и выпуска.

Параметры C/C++

Файл .pdb для C/C++ создается при сборке с использованием /ZI или /Zi. В Visual C++ параметр /Fd присваивает имя файлу .pdb, который создает компилятор.Когда вы создаете проект в Visual Studio с помощью IDE, параметр /Fd устанавливается для создания файла .pdb с именем

Если вы создаете приложение C/C++ с помощью make-файла и указываете /ZI или /Zi без использования /Fd, компилятор создает два файла .pdb:

VC .pdb, где представляет версию компилятора Microsoft C++, например VC11.pdb

В файле VC .pdb хранится вся отладочная информация для отдельных объектных файлов, и он находится в том же каталоге, что и make-файл проекта. Каждый раз при создании объектного файла компилятор C/C++ объединяет отладочную информацию с файлом VC .pdb. Таким образом, даже если каждый исходный файл включает общие файлы заголовков, такие как , определения типов из этих заголовков сохраняются только один раз, а не в каждом объектном файле. Вставленная информация включает информацию о типе, но не включает информацию о символах, такую ​​как определения функций.

В файле

.pdb хранится вся отладочная информация для файла .exe проекта, и он находится в подкаталоге \debug.

Файл

.pdb содержит полную информацию об отладке, включая прототипы функций, а не только информацию о типе из VC .pdb.

Как VC .pdb, так и

Файлы

.pdb допускают добавочные обновления. Компоновщик также встраивает путь к файлам .pdb в создаваемый им файл .exe или .dll.

Таблицы экспорта DLL

Используйте команду dumpbin /exports, чтобы просмотреть символы, доступные в таблице экспорта библиотеки DLL. Символическая информация из таблиц экспорта DLL может быть полезна для работы с сообщениями Windows, процедурами Windows (WindowProcs), COM-объектами, маршалингом или любой библиотекой DLL, для которой у вас нет символов. Символы доступны для любой 32-битной системной DLL. Вызовы перечислены в порядке вызова, при этом текущая функция (наиболее глубоко вложенная) находится вверху.

Прочитав выходные данные dumpbin /exports, можно увидеть точные имена функций, включая небуквенно-цифровые символы. Просмотр точных имен функций полезен для установки точки останова для функции, поскольку имена функций могут быть усечены в другом месте отладчика. Дополнительные сведения см. в разделе dumpbin/exports.

Веб-приложения

Загружать символы во время отладки

Вы можете использовать модули, стек вызовов, локальные, автоматические или любое окно просмотра для загрузки символов или изменения параметров символов во время отладки. Дополнительные сведения см. в статье Знакомство с тем, как отладчик подключается к вашему приложению.

Работа с символами в окне "Модули"

Во время отладки в окне "Модули" отображаются модули кода, которые отладчик обрабатывает как код пользователя или "Мой код", а также статус загрузки их символов. Вы также можете отслеживать статус загрузки символов, загружать символы и изменять параметры символов в окне «Модули».

Чтобы отслеживать или изменять расположение или параметры символов во время отладки:

  1. Чтобы открыть окно "Модули", во время отладки выберите "Отладка" > "Окна" > "Модули" (или нажмите Ctrl + Alt + U).
  2. В окне "Модули" щелкните правой кнопкой мыши заголовки "Статус символа" или "Файл символов" или любой модуль.
  3. В контекстном меню выберите один из следующих вариантов:

Использование страниц без загрузки символов/без загрузки исходного кода

Существует несколько способов, с помощью которых отладчик может проникнуть в код, в котором отсутствуют символы или исходные файлы:

  • Перейти к коду.
  • Взлом в код из точки останова или исключения.
  • Переключиться на другую цепочку.
  • Измените фрейм стека, дважды щелкнув фрейм в окне стека вызовов.

В этом случае отладчик отображает страницы Нет загруженных символов или Исходный код не загружен, чтобы помочь вам найти и загрузить необходимые символы или источник.

Страница без символов

Чтобы использовать страницу документа "Нет символов загружено" для поиска и загрузки отсутствующих символов:

Если отладчик находит файл .pdb после выполнения одной из опций и может получить исходный файл, используя информацию в файле .pdb, он отображает источник. В противном случае отображается страница «Нет загруженного источника», на которой описывается проблема со ссылками на действия, которые могут ее решить.

Чтобы добавить пути поиска исходных файлов в решение:

Вы можете указать места, в которых отладчик ищет исходные файлы, и исключить определенные файлы из поиска.

Выберите решение в обозревателе решений, а затем выберите значок "Свойства", нажмите клавиши ALT+ВВОД или щелкните правой кнопкой мыши и выберите "Свойства".

Выберите исходные файлы отладки.

Страница исходных файлов отладки

В разделе Каталоги, содержащие исходный код, введите или выберите местоположения исходного кода для поиска.Используйте значок "Новая линия", чтобы добавить дополнительные местоположения, значки со стрелками вверх и вниз, чтобы изменить их порядок, или значок X, чтобы удалить их.

Отладчик выполняет поиск только в указанном каталоге. Вы должны добавить записи для любых подкаталогов, которые вы хотите найти.

В разделе Не искать эти исходные файлы введите имена исходных файлов, которые нужно исключить из поиска.

При связывании приложений, библиотек, драйверов или операционных систем компоновщик, который создает файлы .exe и .dll, также создает ряд дополнительных файлов, известных как файлы символов.

Файлы символов содержат различные данные, которые на самом деле не нужны при запуске двоичных файлов, но могут быть очень полезны в процессе отладки.

Обычно файлы символов могут содержать:

Имена функций и адреса их точек входа

Записи с пропуском указателя кадра (FPO)

Каждый из этих элементов по отдельности называется символом. Например, один файл символов Myprogram.pdb может содержать несколько сотен символов, включая глобальные переменные и имена функций, а также сотни локальных переменных. Часто компании-разработчики программного обеспечения выпускают две версии каждого файла символов: полный файл символов, содержащий как общедоступные символы, так и частные символы, и сокращенный (урезанный) файл, содержащий только общедоступные символы. Дополнительные сведения см. в разделе Общедоступные и частные символы.

При отладке необходимо убедиться, что отладчик может получить доступ к файлам символов, связанным с отлаживаемой целью. И для динамической отладки, и для отладочных файлов аварийного дампа требуются символы. Вы должны получить правильные символы для кода, который хотите отладить, и загрузить эти символы в отладчик.

Символы Windows

Windows хранит свои символы в файлах с расширением .pdb.

Компилятор и компоновщик управляют форматом символа. Компоновщик Visual C++ помещает все символы в файлы .pdb.

Операционная система Windows была создана в двух версиях. Бесплатная сборка (или розничная сборка) содержит относительно небольшие двоичные файлы, а проверенная сборка (или отладочная сборка) имеет большие двоичные файлы с большим количеством отладочных символов в самом коде. Проверенные сборки были доступны в более старых версиях Windows до Windows 10 версии 1803. Каждая из этих сборок имела собственные файлы символов. При отладке цели в Windows необходимо использовать файлы символов, соответствующие сборке Windows на цели.

В следующей таблице перечислены несколько каталогов, существующих в стандартном дереве символов Windows:

Путь к символам указывает расположение, в котором отладчики Windows (WinDbg, KD, CDB, NTST) ищут файлы символов. Дополнительные сведения о символах и файлах символов см. в разделе Символы.

Некоторые компиляторы (например, Microsoft Visual Studio) помещают файлы символов в тот же каталог, что и двоичные файлы. Файлы символов и проверенные двоичные файлы содержат информацию о пути и имени файла. Эта информация часто позволяет отладчику автоматически находить файлы символов. Если вы отлаживаете процесс пользовательского режима на компьютере, на котором был создан исполняемый файл, и если файлы символов все еще находятся в исходном расположении, отладчик может найти файлы символов без указания пути к символу.

В большинстве других ситуаций необходимо указать путь к символу так, чтобы он указывал на расположение файлов символов.

Синтаксис пути символа

Путь символа отладчика — это строка, состоящая из нескольких путей к каталогам, разделенных точкой с запятой.

Относительные пути поддерживаются. Однако, если вы не всегда запускаете отладчик из одного и того же каталога, вам следует добавить букву диска или общий сетевой ресурс перед каждым путем. Также поддерживаются общие сетевые ресурсы.

Для каждого каталога в пути к символу отладчик просматривает три каталога. Например, если путь к символу включает каталог c:\MyDir, а отладчик ищет информацию о символе для DLL, он сначала ищет в c:\MyDir\symbols\dll , а затем в c:\MyDir\dll , и, наконец, в c:\MyDir . Затем отладчик повторяет этот процесс для каждого каталога в пути к символу. Наконец, отладчик ищет в текущем каталоге, а затем в текущем каталоге с добавленным к нему ..\dll. (Отладчик добавляет ..\dll , ..\exe или ..\sys в зависимости от того, какие двоичные файлы он отлаживает.)

Файлы символов имеют метки даты и времени. Вам не нужно беспокоиться о том, что отладчик будет использовать неправильные символы, которые он может найти первыми в этой последовательности. Он всегда ищет символы, соответствующие отметке времени в двоичных файлах, которые он отлаживает. Дополнительные сведения об ответах, когда файлы символов недоступны, см. в разделе Компенсация проблем с сопоставлением символов.

Один из способов задать путь к символу — ввести команду .sympath. Другие способы задания пути к символу см. в разделе Управление путем к символу далее в этом разделе.

Локальное кэширование символов

Мы настоятельно рекомендуем всегда кэшировать символы локально.Одним из способов локального кэширования символов является включение cache*; или cache*localsymbolcache;* в вашем пути к символу.

Если вы включите строковый кеш*; в вашем пути к символу символы, загруженные из любого элемента, который появляется справа от этой строки, сохраняются в каталоге кэша символов по умолчанию на локальном компьютере. Например, следующая команда указывает отладчику получить символы из общей сетевой папки \\someshare и кэшировать символы в расположении по умолчанию на локальном компьютере.

Если вы включите строковый cache*localsymbolcache; в вашем пути к символу символы, загруженные из любого элемента, который появляется справа от этой строки, хранятся в каталоге localsymbolcache.

Например, следующая команда указывает отладчику получить символы из общей сетевой папки \\someshare и кэшировать символы в каталоге c:\MySymbols.

Использование сервера символов

Если вы подключены к Интернету или корпоративной сети, наиболее эффективным способом доступа к символам является использование сервера символов. Вы можете использовать сервер символов, указав строку srv* , srv*symbolstore или srv*localsymbolcache*symbolstore в пути к символу.

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

Если на вашем компьютере есть каталог, в который вы вручную помещаете символы, не используйте этот каталог в качестве кэша для символов, полученных с сервера символов. Вместо этого используйте два отдельных каталога. Например, вы можете вручную поместить символы в c:\MyRegularSymbols, а затем назначить c:\MyServerSymbols кэшем для символов, полученных с сервера. В следующем примере показано, как указать оба каталога в пути к символу.

Объединение кеша* и srv*

Если вы включите строковый cache*localsymbolcache; в вашем пути к символу символы, загруженные из любого элемента, который появляется справа от этой строки, хранятся в каталоге localsymbolcache.

Использование AgeStore для уменьшения размера кеша

Вы можете использовать инструмент AgeStore для удаления кэшированных файлов, которые старше указанной даты, или для удаления достаточного количества старых файлов, чтобы результирующий размер кэша был меньше указанной суммы. Это может быть полезно, если ваш нижестоящий магазин слишком велик. Подробнее см. в разделе AgeStore.

Дополнительную информацию о серверах символов и хранилищах символов см. в разделе Пользовательские хранилища символов и серверы символов.

Отложенная загрузка символов

Отладчик по умолчанию использует отложенную загрузку символов (также известную как отложенная загрузка символов). Этот тип загрузки означает, что символы не загружаются до тех пор, пока они не потребуются.

При изменении пути к символу, например с помощью команды .sympath, все загруженные модули с экспортируемыми символами перезагружаются в ленивом режиме.

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

Дополнительную информацию об отложенной загрузке символов см. в разделе Отложенная загрузка символов.

Отложенную загрузку символов в CDB и KD можно отключить с помощью параметра командной строки -s. Вы также можете принудительно загрузить символы с помощью команды ld (загрузить символы) или с помощью команды .reload (перезагрузить модуль) вместе с параметром /f.

Артефакты Azure DevOps Services

Сервер символов доступен с Azure Artifacts в Azure DevOps Services. Сведения о работе с артефактами Azure в WinDbg см. в разделе Отладка с помощью символов в WinDbg. Общие сведения о созданных Azure символах см. в разделе Файлы символов (PDB).

Управление путем символа

Для управления путем символа можно выполнить одно из следующих действий:

Используйте команду .sympath для отображения, установки, изменения или добавления к пути. Команда .symfix (Установить путь к хранилищу символов) похожа на .sympath, но избавляет вас от необходимости печатать.

Перед запуском отладчика используйте переменные среды _NT_SYMBOL_PATH и _NT_ALT_SYMBOL_PATH, чтобы задать путь. Путь символа создается путем добавления _NT_SYMBOL_PATH после _NT_ALT_SYMBOL_PATH. (Обычно путь задается через _NT_SYMBOL_PATH . Однако вы можете использовать _NT_ALT_SYMBOL_PATH для переопределения этих настроек в особых случаях, например, если у вас есть частные версии общих файлов символов.) Если вы попытаетесь добавить недопустимый каталог через эти переменные среды, отладчик игнорирует этот каталог.

При запуске отладчика используйте параметр командной строки -y, чтобы задать путь.

(только для WinDbg) Используйте команду Файл | Путь к файлу символа или нажмите CTRL+S, чтобы отобразить, задать, изменить или добавить путь к пути.

Если вы используете параметр командной строки -sins, отладчик игнорирует переменную среды пути к символу.

Поддержка Windows Vista с пакетом обновления 1 (SP1) заканчивается 12 июля 2011 г. Чтобы продолжать получать обновления безопасности для Windows, убедитесь, что вы используете Windows Vista с пакетом обновления 2 (SP2). Дополнительные сведения см. на этой веб-странице Microsoft: поддержка некоторых версий Windows прекращается.

Обзор

Отладочные символы Windows необходимо проверить после запуска отладчика ядра (I386kd.exe | Windbg.exe). Отладчик может загрузить и представить подсказку, но если символы неверны, будущие команды отладки не будут ссылаться на правильные функции и переменные, что приводит к спорадическим результатам. Ниже перечислены несколько красных флажков и несколько методов выборочной проверки правильности символов.

Дополнительная информация

В этой статье предполагается, что отладчик ядра запущен и загрузил файл Memory.dmp или подключен к удаленному компьютеру. Представленные команды не полностью задокументированы, показаны только выдержки из вывода.

Содержание статьи

Загрузка отладчика ядра

Проверка времени создания с помощью !drivers

Использование Link.exe для проверки времени создания

Разборка функции

Символы пакетов обновлений

Загрузка отладчика ядра

При нормальной загрузке отладчика ядра отображается одно из следующих сообщений:

kd> Однопроцессорная система

0: kd> Многопроцессорная система
Показанный ниже запрос указывает, что файл символов для файла Ntoskrnl.exe неверен. Убедитесь, что соответствующее многопроцессорное или однопроцессорное ядро ​​и HAL скопированы в дерево символов.


Пример:
Путь поиска символов: C:\symbols
kd: аварийный дамп инициализирован
не удалось определить текущий процессор, использующий ноль
Ядро версии 1057 Бесплатно загружается @ 0x80100000
Ошибка 0000001e : c0000005 80151d5b 00000000 00000001
*** Содержимое удалено ***
16kd>
Когда отладчик ядра загружает файл Memory.dmp, версия ядра, а также количество процессоров отображаются в первых нескольких строках. Убедитесь, что количество процессоров соответствует соответствующему ядру и HAL. Информация о символе драйвера отображается как при загрузке, так и при отложенной загрузке символов.

Образец загрузки:
Путь поиска символов: C:\symbols
kd: аварийный дамп инициализирован
Ядро версии 1057 Загружено бесплатно @ 0x80100000< br />Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
повторная загрузка всех символов ядра
KD: выгрузка символов для «ntoskrnl.exe»
KD: отложена загрузка символов для «ntoskrnl.exe» в 80100000
KD: загружено (2248) записей fpo для образа (ntoskrnl.exe)
KD: "ntoskrnl.exe" загружено 4074 символа (80100000-801bbb80)
KD: загружено символов для "ntoskrnl .exe"
KD: отложена загрузка символов для "atapi.sys" по адресу fc810000
KD: отложена загрузка символов для "diskdump.sys" по адресу fc800000
KD: отложена загрузка символов для "hal. dll" по адресу 80400000
KD: отложена загрузка символов для "atapi.sys" по адресу 80010000
KD: отложена загрузка символов для "SCSIPORT.SYS" по адресу 80013000
KD: отложена загрузка символов для "Atdisk .sys" по адресу 80001000
KD: отложена загрузка символов для "Scsidisk.sys" по адресу 8001b000
KD: отложена загрузка символов для "Fastfat.sys" at 80372000
Невозможно прочитать заголовок изображения для Floppy.SYS в fc820000 - статус c0000001
*** Содержимое удалено ***
KD: отложена загрузка символа для "srv.sys" в fc9e0000< br />KD: отложена загрузка символов для "ntdll.dll" по адресу 77f80000
завершена повторная загрузка всех символов ядра
NT!_PspUnhandledExceptionInSystemThread+0x18:
80131ff8 b801000000 mov eax,0x1
kd>
Обратите внимание, что отладчик ядра "Не удалось прочитать заголовок изображения для Floppy.sys по адресу fc820000 - статус c0000001". Это нормальное сообщение, потому что в данный момент соответствующий заголовок драйвера отсутствует в памяти.

Проверка времени создания с помощью !drivers

Используйте команду !drivers, чтобы вывести список драйверов, загруженных в данный момент в память. Запишите даты и время драйверов, а также возможность их загрузки. (Столбцы Размер кода и Размер данных в следующем примере удалены, чтобы соответствовать ширине статьи.)
kd> !drivers
Базовый размер кода Размер данных Имя драйвера Время создания
80100000 Ntoskrnl .exe Пт 26 мая 18:18:36 1995
80400000 Hal.dll Чт 11 мая 13:54:18 1995
80010000 Atapi.sys Вт 23 мая 21:01:41 1995
80013000 Scsiport.sys 5 мая 23:11:06 1995
80001000 Atdisk.sys 05 мая 23:10:40 1995
8001b000 Scsidisk.sys 5 мая 23:11:01 1995
80372000 Fastfat.sys Пн, 22 мая, 23:57:13 1995
fc820000 Заголовок Floppy.sys выгружается
fc830000 Scsicdrm.sys Среда, 10 мая, 21:57:03 1995
fc840000 Заголовок Fs_Rec.sys Выгружается
fc850000 Заголовок Null.sys Выгружается
fc860000 Заголовок Beep.sys Выгружается
fc870000 I8042prt.sys Пт, 05 мая, 23:10:42 1995
fc880000 Mouclass.sys Пт 05 мая 23:10:45 1995
fc890000 Kbdclass.sys Пт 05 мая 23:10:44 1995
fc8b0000 Videoprt.sys Пт 05 мая 23:10:05 1995
fc8a0000 S3 .sys Пт 19 мая 21:18:06 1995
fc8c0000 Vga.sys Пт 05 мая 23:10:10 1995
fc8d0000 Msfs.sys Пт 05 мая 23:11:57 1995
fc8e0000 Npfs.sys Пт, 05 мая 23:11:40 1995
fc900000 Ndis.sys Пн, 22 мая, 20:23:18 1995
fc8f0000 El59x.sys Пт, 10 февраля, 16:18:09 1995
fc940000 Tdi.sys Пт 05 мая 23:13:09 1995
fc920000 Nbf.sys Пн 08 мая 15:00:47 1995
fc950000 Netbios.sys Пт 05 мая 23:13:19 1995
fc960000 Заголовок Parport.sys выгружен
fc970000 Заголовок Parallel.sys выгружен
fc980000 Serial.sys Пт, 05 мая 23:11:20 1995
fc990000 Заголовок Afd.sys выгружен
>fc9a0000 Rdr.sys Wed 17 May 17:18:16 1995
fc9e0000 Srv.sys Wed 24 May 21:56:59 1995
ВСЕГО: 1ab460 (1709 kb) 3b7c0 ( 237 kb) ( 0 kb 0 kb)
kd>
Обратите внимание на время создания файла, которое является датой компиляции файла. Эта дата близка к отметке даты\времени в фактическом файле при просмотре подпапки Winnt\System32\Drivers с помощью диспетчера файлов.

Если вы подписаны на Microsoft Developers Network (MSDN) или у вас есть комплект драйверов устройств Windows (DDK), инструмент Link.exe можно использовать для подтверждения того, что файл Dbg является тем же файлом, который был создан при установке драйвера. скомпилировано. «Отметка даты и времени» в приведенном ниже примере соответствует «Времени создания» Netbios.sys в выходных данных выше.

Используйте Link.exe для проверки "отметки даты и времени" файла Dbg:

ССЫЛКА -dump -headers \symbols\sys\netbios.dbg
Microsoft (R) COFF Binary File Dumper Версия 3.00.5270
Авторское право (C) Microsoft Corp. 1992-1995. Все права защищены.

Дамп файла Netbios.dbg

подпись 4944
0 флагов
машина 14C (i386)
306 характеристик
2FAAE94F отметка времени и даты пятница май 05 23:13:19 1995

8D0B контрольная сумма изображения

10000 баз изображения

Размер изображения 70A0
** Содержимое удалено **

Если команда !drivers выводит строки, подобные приведенным ниже, это означает, что важная таблица в дампе повреждена. Дальнейший анализ дампа может быть невозможен.

Невозможно прочитать DosHeader по адресу 0583002a - статус 00000000
Невозможно прочитать DosHeader по адресу 0587002a - статус 00000000
Невозможно прочитать DosHeader по адресу 0588002a - статус 00000000
Невозможно прочитать DosHeader по адресу 058a002a - статус 00000000
Не удалось прочитать DosHeader по адресу 058c002a — статус 00000000

Разборка функции

Файлы символов позволяют отладчику ядра обращаться к функциям и глобальным переменным по имени. Выборочно проверьте пару несобранных функций, чтобы убедиться, что они выглядят правильно. Многие функции оптимизированы компилятором и не обязательно соответствуют приведенным ниже примерам. Оптимизированные компилятором функции идентифицируются FPO в круглых скобках в имени функции.


Функции обычно начинаются с «push ebp» или «mov eax, fs[000000000]». Базовые знания машинного языка и опыт позволят распознать эти функции.

Список загруженных модулей
x *!

Список символов для конкретного модуля (например, Ntoskrnl.exe).
х нт!*

Выберите функцию для разборки, которая не оптимизирована компилятором.
u NT!_NtUnlockFile

Хорошие символы

Разборка функции должна выглядеть примерно так, как показано выше; однако разборка может быть изменена. Если разборка выглядит правильно, вы можете предположить, что символы для этого модуля загружены правильно.


Следующая разборка начинается с "jnz NT!_NTUnlockFile+0x22". Очевидно, что начало функции не должно начинаться с кода инструкции перехода. Еще раз проверьте дерево символов.

Неверные символы

Символы пакетов обновлений

Бывают случаи, когда сложно сопоставить символы с конкретной установкой. В какой-то момент могла быть добавлена ​​служба, требующая копирования файлов с установочного компакт-диска Windows, которая копировала файлы, обновленные с помощью пакета обновления. Обязательно повторно примените пакет обновления и любые сторонние диски поддержки после изменения настройки системы, которая копирует файлы с установочного компакт-диска Windows. Символы следует наносить в том же порядке, что и при установке.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Чтобы найти серию статей "Отладка ядра", выполните поиск по ключевому слову: debugref.

Технологии работы с символами Windbg 2.0.x

В отладчике Microsoft Debuggers версии 2.0.x и более поздних есть дополнительные шаги проверки символов, которые можно использовать. Дополнительные сведения см. на следующем веб-сайте Microsoft:

Читайте также: