Отладка процесса User-Mode с помощью классической версии WinDbg

WinDbg можно использовать для подключения к запущенным процессам или для создания и подключения к новому процессу.

Присоединение к выполняющимся процессам

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

Меню WinDbg

Если WinDbg находится в неактивном режиме, можно подключиться к выполняющимся процессам, выбрав в меню Файлпункт Присоединиться к процессу или нажав клавишу F6.

В диалоговом окне Присоединение к процессу выберите процесс, который требуется отладить, и нажмите кнопку ОК.

Командная строка

В окне командной строки можно подключиться к запущенным процессам при запуске WinDbg. Используйте одну из следующих команд:

  • windbg -pProcessID
  • windbg -pnProcessName

Где ProcessID — это идентификатор выполняющегося процесса, а ProcessName — имя выполняющегося процесса.

Дополнительные сведения о синтаксисе командной строки см. в разделе Параметры Command-Line WinDbg.

Командное окно отладчика

Если WinDbg уже выполняет отладку одного или нескольких процессов, можно подключиться к выполняющимся процессам с помощью команды .attach (Присоединить к процессу) в окне Команда отладчика.

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

Если команда .attach выполнена успешно, отладчик подключается к указанному процессу при следующем выполнении отладчиком команды выполнения. Если вы используете эту команду несколько раз подряд, отладчик должен запрашивать выполнение столько раз, сколько используется эта команда.

Неинвазивное присоединение к выполняющимся процессам

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

Меню WinDbg

Если WinDbg находится в неактивном режиме, вы можете неинвазивно отлаживать выполняющийся процесс, выбрав в меню Файлпункт Присоединиться к процессу или нажав клавишу F6.

Когда откроется диалоговое окно Присоединение к процессу, выберите неинвазивный проверка. Затем выберите строку, содержащую нужные идентификатор и имя процесса. (Вы также можете ввести идентификатор процесса в поле Идентификатор процесса .) Наконец, нажмите кнопку ОК.

Командная строка

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

  • windbg -pv -pProcessID
  • windbg -pv -pnProcessName

Существует несколько других полезных параметров командной строки. Дополнительные сведения о синтаксисе командной строки см. в разделе Параметры Command-Line WinDbg.

Командное окно отладчика

Если отладчик уже активен, вы можете выполнить неинвазивную отладку выполняющегося процесса с помощью команды .attach -v (Присоединить к процессу) в окне Команда отладчика.

Команду .attach можно использовать, если отладчик уже выполняет инвазивную отладку одного или нескольких процессов. Эту команду нельзя использовать, если WinDbg неактивен.

Если команда .attach -v выполнена успешно, отладчик выполняет отладку указанного процесса в следующий раз, когда отладчик выдает команду выполнения. Так как выполнение во время неинвазивной отладки запрещено, отладчик не может выполнять неинвазивную отладку нескольких процессов одновременно. Это ограничение также означает, что использование команды .attach -v может сделать существующий инвазивный сеанс отладки менее полезным.

Создание нового процесса

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

Процессы, создаваемые отладчиком (также называемые порожденными процессами), ведут себя немного иначе, чем процессы, не создаваемые отладчиком.

Вместо использования стандартного API кучи процессы, создаваемые отладчиком, используют специальную отладочную кучу. Вы можете принудительно использовать порожденный процесс вместо отладочной кучи стандартную кучу с помощью переменной среды _NO_DEBUG_HEAP или параметра командной строки -hd .

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

Меню WinDbg

Если WinDbg находится в неактивном режиме, вы можете создать новый процесс, выбрав Открыть исполняемый файл в меню Файл или нажав клавиши CTRL+E.

Когда откроется диалоговое окно Открыть исполняемый файл, введите полный путь к исполняемому файлу в поле Имя файла или выберите нужный путь и имя файла в списке Поиск .

Если вы хотите использовать параметры командной строки с приложением пользовательского режима, введите их в поле Аргументы . Если вы хотите изменить начальный каталог с каталога по умолчанию, введите путь к каталогу в поле Начальный каталог. Если вы хотите подключить WinDbg к дочерним процессам, установите флажок Отладка дочерних процессов также проверка.

После выбора нажмите кнопку Открыть.

Командная строка

В окне командной строки можно создать новый процесс при запуске WinDbg. Используйте следующую команду:

windbg [-o]ProgramName[Arguments]

Параметр -o приводит к подключению отладчика к дочерним процессам. Существует несколько других полезных параметров командной строки. Дополнительные сведения о синтаксисе командной строки см. в разделе Параметры Command-Line WinDbg.

Командное окно отладчика

Если WinDbg уже выполняет отладку одного или нескольких процессов, можно создать новый процесс с помощью команды .create (Create Process) в окне Команда отладчика.

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

Если команда .create выполнена успешно, отладчик создает указанный процесс при следующем выполнении отладчиком команды выполнения. Если вы используете эту команду несколько раз подряд, отладчик должен запрашивать выполнение столько раз, сколько используется эта команда.

Вы можете управлять начальным каталогом приложения с помощью команды .createdir (Set Created Process Directory) перед .create. Вы можете использовать команду .createdir -I или параметр командной строки -noinh , чтобы управлять тем, наследует ли целевое приложение дескриптор отладчика.

Вы можете активировать или отключить отладку дочерних процессов с помощью команды .childdbg (Отладка дочерних процессов).

Повторное присоединение к процессу

Если отладчик перестает отвечать на запросы или зависает, можно подключить новый отладчик к целевому процессу. Дополнительные сведения о подключении отладчика в этой ситуации см. в разделе Повторное подключение к целевому приложению.