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


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

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

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

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

Меню WinDbg

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

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

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

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

  • windbg -pProcessID
  • windbg -pnProcessName

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

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

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

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

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

Если команда 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) перед созданием. Вы можете использовать команду .createdir -I или параметр командной строки -noinh , чтобы контролировать, наследует ли целевое приложение дескриптор отладчика.

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

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

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