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


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

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

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

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

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

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

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

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

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

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

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

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] 
    

    Сведения о доступных вариантах транспорта см. в разделе "Активация сервера отладки".

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

    windbg [-y KernelSymbolPath] [-k ConnectionOptions] 
    

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

    .

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

    cdb -remote ClientTransport 
    

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

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

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

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

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

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

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

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

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

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