Инструменты отладки для Windows, как использовать

Обновлено: 21.11.2024

Инструменты отладки для Windows включают несколько инструментов в дополнение к механизму отладки и средам отладки. Эти инструменты находятся в каталоге установки Debugging Tools for Windows.

DumpChk
Проверить файл дампа памяти.

GFlags
Управление ключами реестра и другими настройками.

Убить
Завершить процесс.

Logger и LogViewer
Запись и отображение вызовов функций и других действий программы.

PLMDebug
Используйте отладчик Windows для отладки приложений Windows, которые выполняются в рамках управления жизненным циклом процессов (PLM). С помощью PLMDebug вы можете вручную управлять приостановкой, возобновлением и завершением работы приложения Windows.

Remote Tool
Удаленное управление любой консольной программой, включая KD, CDB и NTSD. См. Удаленная отладка с помощью Remote.exe.

TList
Список всех запущенных процессов.

UMDH
Анализ распределения кучи.

USBView
Отображение хост-контроллеров USB и подключенных устройств.

DbgRpc (Dbgrpc.exe)
Отображение информации о состоянии удаленного вызова процедур Microsoft (RPC). См. раздел Отладка RPC и использование средства DbgRpc.

KDbgCtrl (управление отладкой ядра, Kdbgctrl.exe)
Управление и настройка соединения для отладки ядра. См. Использование KDbgCtrl.

SrcSrv
Исходный сервер, который можно использовать для доставки исходных файлов во время отладки.

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

SymChk
Сравните исполняемые файлы с файлами символов, чтобы убедиться, что доступны правильные символы.

AgeStore
Удаляет старые записи в нижестоящем хранилище сервера символов или исходного сервера.

DBH
Отображение информации о содержимом файла символов.

PDBCopy
Удаление информации о частных символах из файла символов и управление включением общедоступных символов в файл.

DbgSrv
Сервер процессов, используемый для удаленной отладки. См. Серверы обработки (режим пользователя).

KdSrv
Сервер соединений KD, используемый для удаленной отладки. См. Серверы соединений KD (режим ядра).

DbEngPrx
Ретранслятор (небольшой прокси-сервер), используемый для удаленной отладки. См. Ретрансляторы.

Breakin (Breakin.exe)
Вызывает прерывание пользовательского режима в процессе. Для получения справки откройте окно командной строки, перейдите в каталог установки и введите breakin /?.

List (утилита списка файлов) (List.exe)
Для справки откройте окно командной строки, перейдите в каталог установки и введите list /?.

RTList (Просмотр удаленного списка задач) (Rtlist.exe)
Список запущенных процессов через сервер процессов DbgSrv. Для получения справки откройте окно командной строки, перейдите в каталог установки и введите rtlist /?.

Каталог установки

Каталог установки по умолчанию для 64-разрядной ОС для инструментов отладки — C:\Program Files (x86)\Windows Kits\10\Debuggers\. Если у вас 32-разрядная ОС, вы можете найти папку Windows Kits в папке C:\Program Files. Чтобы определить, следует ли использовать 32-разрядные или 64-разрядные инструменты, см. раздел Выбор 32-разрядных или 64-разрядных инструментов отладки.

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

Информацию о том, как получить средства отладки для Windows, см. в разделе Средства отладки для Windows (WinDbg, KD, CDB, NTSD).

После установки инструментов отладки найдите каталоги установки 64-разрядной (x64) и 32-разрядной (x86) версий инструментов. Например:

  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x86

Запустите Блокнот и подключите WinDbg

Перейдите в каталог установки и откройте WinDbg.exe.

В меню "Файл" выберите "Открыть исполняемый файл". В диалоговом окне «Открыть исполняемый файл» перейдите к папке, содержащей notepad.exe (обычно это C:\Windows\System32). В поле Имя файла введите notepad.exe. Выберите Открыть.

В нижней части окна WinDbg введите в командной строке следующую команду:

Выход примерно такой:

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

Введите эту команду, которая указывает WinDbg выполнить первоначальный поиск и загрузку файлов символов:

Чтобы увидеть символы модуля Notepad.exe, введите следующую команду:

Примечание. Если вы не видите никаких выходных данных, введите .reload еще раз.

Чтобы просмотреть символы в модуле Notepad.exe, содержащие main, используйте команду проверки символов, подобную этой, чтобы вывести список модулей, соответствующих маске:

Выход примерно такой:

Чтобы установить точку останова в notepad!wWinMain, введите следующую команду:

Чтобы убедиться, что точка останова установлена, введите следующую команду:

Выход примерно такой:

Чтобы запустить Блокнот, введите следующую команду:

Блокнот работает до тех пор, пока не дойдет до функции WinMain, а затем переходит к отладчику.

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

Выход примерно такой:

Чтобы просмотреть трассировку стека, введите следующую команду:

Выход примерно такой:

Чтобы снова запустить Блокнот, введите следующую команду:

Чтобы взломать Блокнот, выберите «Разрыв» в меню «Файл».

Чтобы установить и проверить точку останова в ZwWriteFile, введите следующие команды:

Введите g, чтобы снова запустить Блокнот. В окне «Блокнот» введите текст и выберите «Сохранить» в меню «Файл». Работающий код прерывается, когда дело доходит до ZwCreateFile. Введите k, чтобы увидеть трассировку стека.

В окне WinDbg, слева от командной строки, обратите внимание на номера процессора и потока. В этом примере номер текущего процессора равен 0, а номер текущего потока — 11. Итак, мы смотрим на трассировку стека для потока 11 (который работает на процессоре 0).

Чтобы увидеть список всех потоков в процессе Блокнота, введите эту команду (тильда):

Выход примерно такой:

В этом примере имеется 14 потоков с индексами от 0 до 13.

Чтобы просмотреть трассировку стека для потока 0, введите следующие команды:

Выход примерно такой:

Чтобы выйти из режима отладки и отключиться от процесса Блокнота, введите следующую команду:

Запустите собственное приложение и подключите WinDbg

Предположим, вы написали и создали небольшое консольное приложение.

В этом упражнении предполагается, что созданное приложение (MyApp.exe) и файл символов (MyApp.pdb) находятся в папке C:\MyApp\x64\Debug. Мы также предполагаем, что исходный код приложения находится в C:\MyApp\MyApp и что MyApp.exe скомпилирован на целевой машине.

В меню "Файл" выберите "Открыть исполняемый файл". В диалоговом окне «Открыть исполняемый файл» перейдите в папку C:\MyApp\x64\Debug. В поле Имя файла введите MyApp.exe. Выберите Открыть.

Введите эти команды:

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

Введите эти команды:

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

WinDbg отображает ваш исходный код и командное окно.

В меню "Отладка" выберите "Пошаговое выполнение" (или нажмите F11). Продолжайте шагать, пока не войдете в MyFunction. Когда вы перейдете к строке y = x/p2 , ваше приложение рухнет и ворвется в отладчик. Вывод примерно такой:

Начните с обзора средств отладки для Windows. Этот набор инструментов включает WinDbg и другие отладчики.

Установить средства отладки для Windows

Вы можете получить средства отладки для Windows как часть комплекта разработки или как отдельный набор инструментов:

Как часть WDK

Инструменты отладки для Windows включены в комплект драйверов Windows (WDK). Чтобы получить WDK, см. Загрузка комплекта драйверов для Windows (WDK).

Как часть Windows SDK

Инструменты отладки для Windows включены в пакет разработки программного обеспечения Windows (SDK). Чтобы загрузить установщик или образ ISO, см. Windows SDK в Центре разработки для Windows.

Как отдельный набор инструментов

Вы можете установить только средства отладки для Windows, без Windows SDK или WDK, запустив установку Windows SDK, а затем выбрав в списке компонентов для установки только средства отладки для Windows (и сняв выделение со всех остальных компонентов). Особенности). Чтобы загрузить установщик или образ ISO, см. Windows SDK в Центре разработки для Windows.

Начало работы с отладкой Windows

Чтобы начать работу с отладкой Windows, см. раздел Начало работы с отладкой Windows.

Чтобы приступить к отладке драйверов режима ядра, см. раздел Отладка универсальных драйверов — пошаговая лабораторная работа (Echo Kernel-Mode). Это пошаговое практическое занятие, в котором показано, как использовать WinDbg для отладки Echo — примера драйвера, использующего платформу драйверов режима ядра (KMDF).

Среды отладки

Если на вашем компьютере установлены Visual Studio и WDK, у вас есть шесть доступных сред отладки. Описание этих сред см. в разделе Среды отладки.

Все эти среды отладки предоставляют пользовательские интерфейсы для одного и того же механизма отладки, реализованного в механизме символического отладчика Windows (Dbgeng.dll). Этот механизм отладки также называется отладчиком Windows, а шесть сред отладки вместе называются отладчиками Windows.

Отладчики Windows

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

  • Windows 11 и Windows Server 2022
  • Windows 10 и Windows Server 2016
  • Windows 8.1 и Windows Server 2012 R2
  • Windows 8 и Windows Server 2012

Символы и файлы символов

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

Синие экраны и файлы аварийного дампа

Если Windows перестает работать и отображает синий экран, компьютер был внезапно выключен, чтобы защитить себя от потери данных, и отображает код проверки на наличие ошибок. Дополнительные сведения см. в разделе Проверка ошибок (синие экраны). Вы анализируете файлы аварийного дампа, которые создаются при завершении работы Windows, с помощью WinDbg и других отладчиков Windows. Дополнительные сведения см. в разделе Анализ аварийного дампа с помощью отладчиков Windows (WinDbg).

Инструменты и утилиты

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

Дополнительная документация

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

В этой статье рассказывается, как начать работу с отладкой Windows. Если вы хотите использовать отладчик для анализа аварийного дампа, см. раздел Анализ файлов аварийного дампа с помощью WinDbg.

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

1. Определите хост и цель

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

Цель хоста

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

2. Определите тип: режим ядра или режим пользователя

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

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

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

Если вашей целью является отладка драйвера, определите, является ли этот драйвер драйвером режима ядра или драйвером пользовательского режима. Драйверы Windows Driver Model (WDM) и Kernel-Mode Driver Framework (KMDF) являются драйверами режима ядра. Как следует из названия, драйверы User-Mode Driver Framework (UMDF) — это драйверы пользовательского режима.

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

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

Информацию об использовании отладчика в режиме ядра см. в следующих статьях:

Информацию об использовании отладчика в пользовательском режиме см. в разделе Начало работы с WinDbg (пользовательский режим).

3. Выберите среду отладчика

WinDbg хорошо работает в большинстве ситуаций, но бывают случаи, когда вам может понадобиться использовать другой отладчик, например консольные отладчики для автоматизации или Visual Studio. Дополнительные сведения см. в разделе Среды отладки.

4. Определите, как соединить цель и хост

Обычно целевая и хост-системы связаны сетью Ethernet. Если вы выполняете подготовительную работу или у вас нет Ethernet-подключения к устройству, доступны другие варианты сетевого подключения. Дополнительные сведения см. в следующих статьях:

5. Выберите 32-разрядные или 64-разрядные инструменты отладки

Какие средства отладки выбрать — 32-разрядные или 64-разрядные — зависит от версии Windows, работающей на целевой и основной системах, а также от того, отлаживаете ли вы 32-разрядный или 64-разрядный код. Дополнительные сведения см. в разделе Выбор 32-разрядных или 64-разрядных средств отладки.

6. Настроить символы

Чтобы использовать все расширенные функции WinDbg, необходимо загрузить соответствующие символы. Если у вас неправильно настроены символы, вы будете получать сообщения о том, что символы недоступны, когда вы пытаетесь использовать функции, зависящие от символов. Дополнительные сведения см. в разделе Символы для отладки Windows (WinDbg, KD, CDB, NTSD).

7. Настроить исходный код

Если вашей целью является отладка собственного исходного кода, вам потребуется настроить путь к исходному коду. Дополнительные сведения см. в разделе Исходный путь.

8. Ознакомьтесь с работой отладчика

В разделе этой документации, посвященном работе отладчика, описывается работа отладчика для различных задач. Например, в разделе Загрузка DLL расширений отладчика объясняется, как загружать расширения отладчика. Дополнительные сведения о работе с WinDbg см. в разделе Отладка с помощью WinDbg.

9. Ознакомьтесь с методами отладки

Стандартные методы отладки применимы к большинству сценариев отладки, и примеры включают установку точек останова, проверку стека вызовов и обнаружение утечки памяти. Специализированные методы отладки применяются к определенным технологиям или типам кода. Примеры включают отладку Plug and Play, отладку KMDF и отладку RPC.

10. Используйте справочные команды отладчика

Со временем вы будете использовать различные команды отладки при работе в отладчике. Используйте команду .hh (открыть файл справки HTML) в отладчике, чтобы отобразить справочную информацию о любой команде отладки. Дополнительные сведения о доступных командах см. в справочнике по отладчику.

11. Используйте расширения отладки для определенных технологий

Существует несколько расширений отладки, обеспечивающих синтаксический анализ структур данных, специфичных для предметной области. Дополнительные сведения см. в разделе Специализированные расширения.

12. Узнайте о связанных внутренних компонентах Windows

Эта документация предполагает знание внутреннего устройства Windows. Чтобы узнать больше о внутреннем устройстве Windows (включая использование памяти, контекст, потоки и процессы), ознакомьтесь с дополнительными ресурсами, такими как Внутреннее устройство Windows Марка Руссиновича, Дэвида Соломона и Алекса Ионеску.

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