Отладка процесса User-Mode с помощью CDB

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

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

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

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

  • cdb -pProcessID
  • cdb -pnProcessName

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

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

Окно команд CDB

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

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

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

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

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

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

Чтобы выполнить неинвазивную отладку выполняющегося процесса из командной строки CDB, укажите параметр -pv , параметр -p и идентификатор процесса в следующем синтаксисе.

cdb -pv -pProcessID

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

cdb -pv -pnProcessName

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

Окно команд CDB

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

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

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

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

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

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

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

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

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

cdb [-o]ProgramName[Arguments]

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

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

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

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

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

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

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

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