Depuración de un proceso en modo de usuario mediante CDB

Puede usar CDB para asociar a un proceso en ejecución o para generar y adjuntar a un nuevo proceso.

Asociación a un proceso en ejecución

Símbolo del sistema

En una ventana del símbolo del sistema, puede asociarse a un proceso en ejecución al iniciar CDB. Use uno de los siguientes comandos:

  • cdb -p ProcessID
  • cdb -pn ProcessName

donde ProcessID es el identificador de proceso de un proceso en ejecución o ProcessName es el nombre de un proceso en ejecución.

Para obtener más información sobre la sintaxis de la línea de comandos, vea Opciones de la línea de comandos de CDB.

Ventana de comandos de CDB

Si el depurador ya está depurando uno o varios procesos, puede asociarlo a un proceso en ejecución mediante el comando .attach (Asociar al proceso).

El depurador siempre inicia varios procesos de destino simultáneamente, a menos que algunos de sus subprocesos estén inmovilizados o suspendidos.

Si el comando .attach se realiza correctamente, el depurador se asocia al proceso especificado la próxima vez que el depurador emite un comando de ejecución. Si usa este comando varias veces en una fila, el depurador debe solicitar la ejecución tantas veces como use este comando.

Adjuntar a un proceso en ejecución de forma novasiva

Si desea depurar un proceso en ejecución e interferir solo mínimamente en su ejecución, debe depurar el proceso de forma novasiva.

Símbolo del sistema

Para depurar de forma novasiva un proceso en ejecución desde la línea de comandos de CDB, especifique la opción -pv , la opción -p y el identificador de proceso, en la sintaxis siguiente.

cdb -pv -p ProcessID

O bien, para depurar de forma novasiva un proceso en ejecución especificando el nombre del proceso, use la sintaxis siguiente en su lugar.

cdb -pv -pn ProcessName

Hay otras opciones de línea de comandos útiles. Para obtener más información sobre la sintaxis de la línea de comandos, vea Opciones de la línea de comandos de CDB.

Ventana de comandos de CDB

Si el depurador ya está activo, puede depurar de forma novasiva un proceso en ejecución escribiendo el comando .attach -v (Asociar al proceso).

Puede usar el comando .attach si el depurador ya está depurando uno o varios procesos de forma invasiva.

Si el comando .attach -v se ejecuta correctamente, el depurador depura el proceso especificado la próxima vez que el depurador emite un comando de ejecución. Dado que no se permite la ejecución durante la depuración novasiva, el depurador no puede depurar de forma novasiva más de un proceso a la vez. Esta restricción también significa que el uso del comando .attach -v podría hacer que una sesión de depuración invasiva existente sea menos útil.

Generar un nuevo proceso

CDB puede iniciar una aplicación en modo de usuario y, a continuación, depurar la aplicación. La aplicación se especifica por nombre. El depurador también puede asociarse automáticamente a procesos secundarios (procesos adicionales que inició el proceso de destino original).

Los procesos que crea el depurador (también conocidos como procesos generados) se comportan ligeramente de forma diferente a los procesos que el depurador no crea.

En lugar de usar la API de montón estándar, los procesos que crea el depurador usan un montón de depuración especial. Puede forzar que un proceso generado use el montón estándar en lugar del montón de depuración mediante la variable de entorno _NO_DEBUG_HEAP o la opción de línea de comandos -hd.

Además, dado que la aplicación de destino es un proceso secundario del depurador, hereda los permisos del depurador. Este permiso podría permitir que la aplicación de destino realice determinadas acciones que no se pudieron realizar de otro modo. Por ejemplo, la aplicación de destino podría afectar a los procesos protegidos.

En una ventana del símbolo del sistema, puede generar un nuevo proceso al iniciar CDB. Escriba el siguiente comando.

cdb [-o] ProgramName [Arguments]

La opción -o hace que el depurador se adjunte a los procesos secundarios. Hay otras opciones de línea de comandos útiles. Para obtener más información sobre la sintaxis de la línea de comandos, vea Opciones de la línea de comandos de CDB.

Si el depurador ya está depurando uno o varios procesos, puede crear un nuevo proceso escribiendo el comando .create (Crear proceso).

El depurador siempre iniciará varios procesos de destino simultáneamente, a menos que algunos de sus subprocesos estén inmovilizados o suspendidos.

Si el comando .create se ejecuta correctamente, el depurador crea el proceso especificado la próxima vez que el depurador emite un comando de ejecución. Si usa este comando varias veces en una fila, el depurador debe solicitar la ejecución tantas veces como use este comando.

Puede controlar el directorio inicial de la aplicación mediante el comando .createdir (Establecer directorio de procesos creados) antes de .create. Puede usar el comando .createdir -I o la opción de línea de comandos -noinh para controlar si la aplicación de destino hereda los identificadores del depurador.

Puede activar o desactivar la depuración de procesos secundarios mediante el comando .childdbg (Depurar procesos secundarios).

Volver a asociar a un proceso

Si el depurador deja de responder o se bloquea, puede adjuntar un nuevo depurador al proceso de destino. Para obtener más información sobre cómo adjuntar un depurador en esta situación, consulte Reattaching to the Target Application (Volver a asociar a la aplicación de destino).