Поделиться через


Отладка процесса пользовательского режима с помощью классической версии WinDbg

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

Присоединение к работающему процессу

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

Меню WinDbg

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

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

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

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

  • windbg -p ProcessID
  • windbg -pn ProcessName

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

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

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

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

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

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

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

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

Меню WinDbg

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

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

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

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

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

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

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

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

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

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

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

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

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

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

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

Меню WinDbg

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

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

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

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

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

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

windbg [-o] ProgramName [Аргументы]

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

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

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

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

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

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

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

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

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