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


Объединение этого метода с удаленной отладкой

Иногда полезно управлять отладчиком пользовательского режима из отладчика ядра и использовать отладчик пользовательского режима в качестве сервера отладки одновременно.

Важный

При использовании удаленной отладки существуют дополнительные сведения, включая сведения о включении безопасного режима, см. в разделе Безопасность во время удаленной отладки и вопросы безопасности для средств отладки Windows.

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

Примечание В описании этого сценария целевого приложения ссылается на отлаживаемое приложение пользовательского режима, целевого компьютера ссылается на компьютер, содержащий целевое приложение, а также процесс CDB или NTSD, а хост-компьютер ссылается на компьютер, содержащий отладчик ядра.

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

  1. Запустите NTSD или CDB на целевом компьютере с параметрами командной строки -ddefer и -server, указав нужные параметры транспорта. Параметр -server должен быть первым параметром в командной строке.

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

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] -p PID 
    

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

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] ApplicationName 
    

    Если вы устанавливаете это в качестве отладчика postmortem, вы будете использовать следующий синтаксис. Обратите внимание, что необходимо вручную изменить реестр, чтобы установить посмертный отладчик, включающий параметр -server. Дополнительные сведения см. в разделе Включение посмертной отладки.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] 
    

    Для получения информации о доступных вариантах транспорта см. раздел активация сервера отладки.

  2. Запустите WinDbg или KD на хост-компьютере, как если бы вы собирались отладить целевой компьютер, но не подключайтесь к целевому компьютеру. Чтобы использовать WinDbg, используйте следующий синтаксис.

    windbg [-y KernelSymbolPath] [-k ConnectionOptions] 
    

    Дополнительные сведения об этом шаге см. в отладке Kernel-Mode Live Kernel-Mode с помощью WinDbg (классическая версия)

    .

  3. Запустите WinDbg или CDB в качестве клиента отладки с теми же параметрами транспорта, которые используются для запуска сервера. Этот клиент отладки можно запускать на хост-компьютере или на третьем компьютере.

    cdb -remote ClientTransport 
    

    Дополнительные сведения об этом шаге см. в активации клиента отладки.

  4. После запуска отладчиков и появления запроса Input> в отладчике ядра используйте команду .sleep (приостановить отладчик) для приостановки отладчиков и дайте целевому компьютеру возможность поработать в течение нескольких секунд. Это дает целевому компьютеру время обработки протокола удаленного транспорта, устанавливая соединение между удаленным сервером в режиме пользователя и удаленным клиентом.

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

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

  • Существует два разных режима отладки в пользовательском режиме. При запуске целевого компьютера сервер отладки управляется клиентом отладки, как в любом другом сеансе удаленной отладки; это называется отладка в режиме пользователя с удаленным управлением. Когда отладчик режима ядра выполняется на целевом компьютере и отображается запрос Input>, отладчик в пользовательском режиме управляется отладчиком ядра; это называется отладка пользовательского режима, управляемая ядром.

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

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

  • Чтобы переключиться с отладки управляемого ядром пользовательского режима на отладку удаленного пользовательского режима, используйте команду .sleep (Приостановка отладки). Когда отладчик пользовательского режима просыпается из команды спящего режима, он будет находиться в режиме отладки в удаленном режиме.

  • Чтобы перейти от отладки удаленного режима пользователя на отладку в режиме ядра, введите любую команду из строки Input>. Если эта строка не отображается, переключитесь в режим отладки ядра и затем используйте команду g (Go) в строке kd>.

Во внутреннем режиме отладчик пользовательского режима, запущенный с -ddefer, имеет первый приоритет входных данных от клиента отладки, а второй приоритет — входные данные отладчика ядра. Однако конфликт между одновременными входными данными никогда не может возникнуть, так как, когда отладчик ядра вмешался в целевой компьютер, удаленное подключение недоступно.