Controlar procesos y subprocesos
Al realizar la depuración en modo de usuario, activa, muestra, inmoviliza, descongela, suspende y desuspend procesa y subprocesos.
El proceso activo o actual es el proceso que se está depurando actualmente. Del mismo modo, el subproceso actual o activo es el subproceso que el depurador está controlando actualmente. Las acciones de muchos comandos del depurador vienen determinadas por la identidad del proceso y el subproceso actuales. El proceso actual también determina las asignaciones de direcciones virtuales que usa el depurador.
Cuando se inicia la depuración, el proceso actual es el que el depurador está asociado a o que provocó la excepción que se rompió en el depurador. Del mismo modo, el subproceso actual es el que estaba activo cuando el depurador se adjuntó al proceso o que provocó la excepción. Sin embargo, puede usar el depurador para cambiar el proceso y el subproceso actuales y para inmovilizar o descongelar subprocesos individuales.
En la depuración en modo kernel, los procesos y los subprocesos no se controlan mediante los métodos que se describen en esta sección. Para obtener más información sobre cómo se manipulan los procesos y subprocesos en modo kernel, vea Cambiar contextos.
Mostrar procesos y subprocesos
Para mostrar la información del proceso y del subproceso, puede usar los métodos siguientes:
El | (Estado del proceso) Comando
Comando ~ (Estado del subproceso)
(Solo WinDbg) Ventana Procesos y subprocesos
Establecer el proceso actual y el subproceso
Para cambiar el proceso o subproceso actual, puede usar los métodos siguientes:
Comando |s (Establecer proceso actual)
(Solo WinDbg) Ventana Procesos y subprocesos
Inmovilizar y suspender subprocesos
El depurador puede cambiar la ejecución de un subproceso suspendiendo el subproceso o inmovilizando el subproceso. Estas dos acciones tienen efectos ligeramente diferentes.
Cada subproceso tiene un recuento de suspensiones asociado. Si este recuento es uno o mayor, el sistema no ejecuta el subproceso. Si el recuento es cero o inferior, el sistema ejecuta el subproceso cuando corresponda.
Normalmente, cada subproceso tiene un recuento de suspensiones de cero. Cuando el depurador se asocia a un proceso, incrementa los recuentos de suspensión de todos los subprocesos de ese proceso en uno. Si el depurador se desasocia del proceso, disminuye todos los recuentos de suspensión por uno. Cuando el depurador ejecuta el proceso, disminuye temporalmente todos los recuentos de suspensiones en uno.
Puede controlar el recuento de suspensiones de cualquier subproceso del depurador mediante los métodos siguientes:
El comando ~n (Suspender subproceso) incrementa el recuento de suspensiones del subproceso especificado en uno.
El comando ~m (Reanudar subproceso) disminuye el recuento de suspensiones del subproceso especificado en uno.
El uso más común para estos comandos es generar el recuento de suspensiones de un subproceso específico de uno a dos. Cuando el depurador ejecuta o desasocia del proceso, el subproceso tiene un recuento de suspensiones de uno y permanece suspendido, incluso si se están ejecutando otros subprocesos del proceso.
Puede suspender subprocesos incluso cuando se realiza la depuración novasiva.
El depurador también puede inmovilizar un subproceso. Esta acción es similar a suspender el subproceso de alguna manera. Sin embargo, "frozen" es solo una configuración del depurador. Nada en el sistema operativo Windows reconoce que algo es diferente en este subproceso.
De forma predeterminada, todos los subprocesos no están desenfrenados. Cuando el depurador hace que se ejecute un proceso, los subprocesos que se inmovilizan no se ejecutan. Sin embargo, si el depurador se desasocia del proceso, todos los subprocesos descongelen.
Para inmovilizar y descongelar subprocesos individuales, puede usar los métodos siguientes:
El comando ~f (inmovilizar subproceso) inmoviliza el subproceso especificado.
El comando ~u (Descongelar subproceso) descongela el subproceso especificado.
En cualquier caso, los subprocesos que pertenecen al proceso de destino nunca se ejecutan cuando el depurador se ha dividido en el destino. El recuento de suspensiones de un subproceso afecta al comportamiento del subproceso solo cuando el depurador ejecuta el proceso o se desasocia. El estado inmovilizado afecta al comportamiento del subproceso solo cuando el depurador ejecuta el proceso.
Subprocesos y procesos en otros comandos
Puede agregar especificadores de subprocesos o especificadores de procesos antes de muchos otros comandos. Para obtener más información, consulte los temas de comandos individuales.
Puede agregar el calificador ~e (comando específico del subproceso) antes de muchos comandos y comandos de extensión. Este calificador hace que el comando se ejecute con respecto al subproceso especificado. Este calificador es especialmente útil si desea aplicar un comando a más de un subproceso. Por ejemplo, el siguiente comando repite el comando de extensión !gle para cada subproceso que se está depurando.
~*e !gle
Varios sistemas
El depurador puede asociarse a varios destinos al mismo tiempo. Cuando estos procesos incluyen archivos de volcado de memoria o incluyen destinos dinámicos en más de un equipo, el depurador hace referencia a un sistema, proceso y subproceso para cada acción. Para obtener más información sobre este tipo de depuración, consulte Depuración de varios destinos.