Compartir a través de


Combinación de este método con la depuración remota

A veces resulta útil controlar el depurador en modo de usuario desde el depurador de kernel y usar el depurador en modo de usuario como servidor de depuración al mismo tiempo.

Por ejemplo, esta configuración es útil cuando los símbolos en modo de usuario se encuentran en un servidor de símbolos. En la configuración estándar para controlar el depurador en modo de usuario desde un depurador de kernel, la interacción de los dos depuradores puede provocar pequeños errores en la sincronización, y estos errores pueden impedir la autenticación del servidor de símbolos. La configuración más compleja que se describe aquí puede evitar este problema.

Nota En la descripción de este escenario, la aplicación de destino hace referencia a la aplicación en modo de usuario que se está depurando, el equipo de destino hace referencia al equipo que contiene la aplicación de destino y el proceso CDB o NTSD, y el equipo host hace referencia al equipo que contiene el depurador de kernel.

Para usar esta técnica, debe hacer lo siguiente:

  1. Inicie NTSD o CDB en el equipo de destino, con las opciones de línea de comandos -ddefer y -server, especificando las opciones de transporte deseadas. La opción -server debe ser el primer parámetro de la línea de comandos.

    Por ejemplo, puede asociar a un proceso en ejecución mediante la sintaxis siguiente.

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

    O bien, puede iniciar un nuevo proceso como destino mediante la sintaxis siguiente.

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

    Si va a instalarlo como depurador posterior, usará la sintaxis siguiente. Tenga en cuenta que debe editar manualmente el Registro para instalar un depurador postmortem que incluya el parámetro -server; para obtener más información, consulte Habilitación de la depuración postmortem.

    ntsd -server ServerTransport -ddefer [-y UserSymbolPath] 
    

    Para obtener información sobre las opciones de transporte disponibles, consulte Activación de un servidor de depuración.

  2. Inicie WinDbg o KD en el equipo host, como si fuera a depurar el equipo de destino, pero no entre realmente en el equipo de destino. Para usar WinDbg, use la sintaxis siguiente.

    windbg [-y KernelSymbolPath] [-k ConnectionOptions] 
    

    Para obtener más información sobre este paso, consulte Depuración en modo kernel en directo con WinDbg (clásico)

    .

  3. Inicie WinDbg o CDB como cliente de depuración, con las mismas opciones de transporte que se usan para iniciar el servidor. Este cliente de depuración se puede ejecutar en el equipo host o en un tercer equipo.

    cdb -remote ClientTransport 
    

    Para obtener más información sobre este paso, consulte Activación de un cliente de depuración.

  4. Una vez que se ejecutan los depuradores y aparece el símbolo del sistema Input> en el depurador de kernel, use el comando .sleep (Pausar depurador) para pausar los depuradores y deje que el equipo de destino se ejecute durante unos segundos. Esto proporciona al equipo de destino tiempo para procesar el protocolo de transporte remoto, estableciendo la conexión entre el servidor remoto en modo de usuario y el cliente remoto.

Si usa CDB como depurador en modo de usuario, la ventana del símbolo del sistema asociada a CDB permanece bloqueada y no disponible mientras continúa la depuración. Si usa NTSD, no se crea ninguna ventana adicional, aunque NTSD tenga un identificador de proceso asociado en el equipo de destino.

Los cuatro modos y los métodos de cambio entre ellos descritos en el tema Modos de conmutación se aplican en este escenario de combinación, con las siguientes diferencias:

  • Hay dos modos de depuración en modo usuario diferentes. Cuando se ejecuta el equipo de destino, el cliente de depuración controla el servidor de depuración como en cualquier otra sesión de depuración remota; esto se denomina depuración en modo de usuario controlada de forma remota. Cuando el depurador en modo kernel entra en el equipo de destino y se muestra el símbolo Input>, el depurador en modo de usuario se controla mediante el depurador de kernel; esto se denomina depuración en modo de usuario controlada por kernel.

  • Estos dos modos nunca están disponibles al mismo tiempo. Cuando el depurador de kernel entra en el equipo de destino, aunque el depurador en modo de usuario puede estar activo, el equipo de destino no puede procesar el protocolo de transporte remoto y, por tanto, el depurador en modo de usuario no podrá recibir entradas remotas en esta conexión.

  • Si los símbolos en modo de usuario se encuentran en un servidor de símbolos, los comandos del depurador que requieran acceso a símbolos deben emitirse mientras se encuentran en modo de depuración en modo de usuario controlado de forma remota.

  • Para cambiar de la depuración en modo de usuario controlada por kernel a la depuración en modo de usuario controlada de forma remota, use el comando .sleep (Pausar depurador). Cuando el depurador en modo de usuario se reactiva desde el comando de suspensión, estará en modo de depuración en modo de usuario controlada de forma remota.

  • Para cambiar de depuración en modo de usuario controlada de forma remota a depuración en modo kernel, escriba cualquier comando desde el símbolo del sistema Input>. Si el símbolo no está visible, cambie a la depuración en modo kernel y, a continuación, use el comando g (Go) en el símbolo del sistema kd>.

Internamente, un depurador en modo de usuario iniciado con -ddefer da prioridad a la entrada del cliente de depuración y la segunda prioridad a la entrada del depurador del kernel. Sin embargo, nunca puede haber un conflicto entre entradas simultáneas, ya que cuando el depurador kernel ha entrado en el equipo de destino, la conexión remota no está disponible.