Compartir vía


Visualización de subprocesos en el depurador de Visual Studio (C#, Visual Basic, C++)

La ventana Subprocesos del depurador de Visual Studio le permite examinar y trabajar con subprocesos en su aplicación en depuración. La ventana proporciona características para agrupar, ordenar, marcar, inmovilizar, descongelar y buscar subprocesos en el código y mostrar pilas de llamadas.

La ventana Subprocesos solo está disponible mientras se ejecuta el depurador de Visual Studio. Durante una sesión de depuración, puede abrir la ventana seleccionando Depurar>Windows>Subprocesos.

En este artículo se describe cómo trabajar con la ventana Subprocesos para los programas de C#, Visual Basic o C++. Si busca instrucciones paso a paso sobre cómo usar la ventana Subprocesos, consulte Guía paso a paso: depuración mediante la ventana Subprocesos.

Explorar la tabla de la ventana Subprocesos

La ventana Subprocesos presenta una tabla donde cada fila corresponde a un subproceso independiente de la aplicación. En la vista predeterminada, la tabla muestra todos los subprocesos de la aplicación. Puede configurar las opciones de tabla para mostrar solo los subprocesos que le interesen. La tabla proporciona varias columnas para describir los hilos en detalle. Puede ajustar la ubicación de la columna y ocultar columnas innecesarias.

En la tabla siguiente se describen todas las columnas disponibles para la tabla de la ventana Subprocesos y se indica si la columna está visible u oculta en la vista predeterminada. Las columnas se muestran según su posición de tabla predeterminada de izquierda a derecha.

Columna Predeterminado Descripción
Marcar Visible, sin etiquetar Las banderas rojas de esta columna indican los hilos señalados para atención especial. Seleccione el icono de bandera (el color del icono cambia a rojo) para marcar o desmarcar (cambia al contorno de bandera) un hilo. El icono de bandera de color ayuda a distinguir un hilo marcado de otros hilos de la tabla. Para obtener más información, consulte Marcar y desmarcar subprocesos.
Subproceso actual Visible, sin etiquetar El icono de flecha amarilla de esta columna indica el subproceso actual de la aplicación que se ejecuta en el depurador. Un icono de contorno de flecha en esta columna indica el contexto actual del depurador para un subproceso que no está en curso.
ID Visible Proporciona el número de identificación de cada subproceso.
ID gestionado Visible Muestra los números de identificación gestionados para los subprocesos administrados.
Categoría Visible Indica la categoría de subprocesos como subprocesos de interfaz de usuario, controladores de llamadas a procedimientos remotos o subprocesos de trabajo. Una categoría especial identifica el hilo principal de la aplicación.
Name Visible Identifica cada subproceso por su nombre o <Sin nombre> si el subproceso no tiene ningún nombre especificado. Cuando ya no existe un subproceso, el subproceso tiene la etiqueta [Subproceso destruido].
Ubicación Visible Muestra dónde se ejecuta el subproceso dentro de la pila de llamadas de la aplicación. Seleccione el icono de flecha desplegable para ver la pila de llamadas completa del subproceso. Cuando ya no existe un subproceso, la ubicación se etiqueta como <no disponible>.
Prioridad Escondido Muestra la prioridad o precedencia asignada por el sistema a cada subproceso.
Máscara de afinidad Escondido Muestra la máscara de afinidad del procesador para cada subproceso. En un sistema de varios procesadores, la máscara de afinidad determina los procesadores en los que se puede ejecutar un subproceso.
Recuento suspendido Escondido Proporciona el recuento suspendido. Este recuento determina si un subproceso se puede ejecutar. Para obtener más información, consulte Congelar y reanudar subprocesos.
Nombre de Proceso Escondido Muestra el proceso al que pertenece cada hilo. Los datos de esta columna pueden ser útiles al depurar muchos procesos.
Identificador del proceso Escondido Muestra el identificador de proceso al que pertenece cada subproceso.
Calificador de transporte Escondido Identifica de manera única la máquina a la que está conectado el depurador.

Mostrar y ocultar columnas de tabla

En la barra de herramientas de la ventana Subprocesos, la lista desplegable Columnas muestra la lista de columnas disponibles. Expanda la lista desplegable y seleccione un nombre de columna para alternar su visibilidad en la tabla. Las columnas visibles se indican con una marca de verificación en la lista.

Marcar subprocesos que necesiten especial atención

Use el icono de bandera para marcar subprocesos que requieran atención especial. Los subprocesos marcados se indican mediante un icono de bandera roja en la tabla de la ventana Subprocesos. Para obtener más información, consulte Marcado y desmarcado de subprocesos.

Mostrar solo conversaciones marcadas

Puede filtrar la ventana Subprocesos para mostrar solo subprocesos marcados. En la barra de herramientas de la ventana Subprocesos, seleccione Mostrar solo subprocesos marcados (icono de marca doble). También puede usar el método abreviado de teclado Ctrl + 9. Esta acción solo está disponible cuando hay hilos marcados.

Inmovilizar y reanudar subprocesos

Al inmovilizar un subproceso, el sistema no inicia la ejecución del subproceso, incluso si hay recursos disponibles.

En código nativo, puede suspender o reanudar subprocesos llamando a las funciones de Windows SuspendThread y ResumeThread. También puede llamar a las funciones de MFC CWinThread::SuspendThread y CWinThread::ResumeThread. Si llama a la función SuspendThread o ResumeThread, el número de suspendidos que se muestra en la ventana Subprocesos cambiará. El número de suspendidos no cambia si inmoviliza o reanuda un subproceso nativo. Un subproceso no se puede ejecutar en código nativo a menos que el subproceso se desconecte y tenga un recuento suspendido de cero.

En código administrado, el número de suspendidos cambia al inmovilizar o reanudar un subproceso. Si inmoviliza un subproceso en código administrado, su número de suspendidos es 1. Cuando se congela un subproceso en código nativo, su recuento de suspensión es 0, a menos que use la llamada SuspendThread.

Nota

Al depurar una llamada de código nativo a código administrado, el código administrado se ejecuta en el mismo subproceso físico que el código nativo que realiza la llamada. Suspender o inmovilizar el subproceso nativo también inmoviliza el código administrado.

Cambiar la ejecución de los subprocesos seleccionados

Puede inmovilizar o reanudar la ejecución de uno o varios subprocesos. En la ventana Subprocesos, seleccione los subprocesos para los que desea actualizar el estado de ejecución. En la barra de herramientas de la ventana Subprocesos, seleccione Inmovilizar subprocesos (icono de reproducción y pausa) o Reanudar subprocesos (icono de reproducción verde). La acción solo se aplica a los subprocesos seleccionados actualmente. Las acciones de inmovilizar y reanudar también están disponibles en el menú contextual para cada subproceso.

Cambiar el hilo actual

Una flecha de color amarillo en la tabla de ventana Subprocesos indica el subproceso actual (y la ubicación del puntero de ejecución). El marcador del subproceso actual original también se mantiene (se muestra con un icono de contorno de flecha).

Un icono de flecha amarilla en la ventana de tabla Subprocesos indica el subproceso actual (y la posición del puntero de ejecución). Un icono de flecha de color verde con un extremo curvo indica que un subproceso no actual tiene el contexto del depurador actual.

Cambiar a otro hilo

Hay dos maneras de cambiar el subproceso actual en el depurador. Haga doble clic en cualquier subproceso de la tabla de la ventana de subprocesos para convertirlo en el subproceso actual. También puede hacer clic con el botón derecho en un hilo y seleccionar Cambiar al hilo.

Aplicación de la agrupación y la ordenación de los subprocesos

Puede agrupar subprocesos en la tabla de la ventana Subprocesos usando los mismos criterios que las columnas disponibles. Todos los criterios siempre están disponibles para la agrupación, independientemente de si la columna correspondiente está visible en la vista actual. Solo puede seleccionar una agrupación para la tabla.

Al agrupar los subprocesos, aparece un encabezado en la tabla para cada grupo. El encabezado incluye una descripción de grupo junto con el número de miembros del grupo. Si agrupa por Nombre, es posible que vea agrupaciones con encabezados como Subproceso de trabajo o Subprocesos sin marcar. Aparece un icono de flecha para expandir o contraer junto a cada encabezado de grupo.

Después de aplicar un criterio de agrupación, la vista de la tabla de la ventana Subprocesos se actualiza para mostrar los subprocesos miembros de cada grupo bajo su título. Utilice el icono de flecha para expandir o contraer del grupo para mostrar u ocultar los miembros en la vista actual.

También puede aplicar un único criterio de ordenación a los subprocesos de la tabla de la ventana Subprocesos. La agrupación tiene prioridad sobre la ordenación. Por ejemplo, puede agrupar los threads por Categoría y luego ordenarlos por ID dentro de cada Categoría.

Agrupar subprocesos en la tabla

En la barra de herramientas de la ventana Subprocesos , expanda la lista desplegable Agrupar por y seleccione los criterios para agrupar los subprocesos. También puede quitar la agrupación aplicada seleccionando Ninguno en la lista desplegable Agrupar por.

Ordenar los hilos en la tabla

Aplica la ordenación a los subprocesos en la tabla de la ventana Subprocesos seleccionando los encabezados de columna en la parte superior de la tabla, como Nombre o ID.

Al seleccionar un encabezado de columna, la vista de la tabla de la ventana Subprocesos se actualiza para mostrar los subprocesos ordenados por los valores de la columna seleccionada. La columna seleccionada también muestra un icono de flecha arriba/abajo. El icono de flecha arriba indica la ordenación por la columna seleccionada en orden ascendente. El icono de flecha abajo indica la ordenación por la columna seleccionada en orden descendente. Seleccione el encabezado de columna para cambiar el criterio de ordenación.

Ordenar subprocesos dentro de grupos

Para ordenar hilos dentro de grupos en la ventana Subprocesos, primero use la lista desplegable Agrupar por para aplicar los criterios de agrupación. A continuación, seleccione el encabezado de columna para ordenar los subprocesos agrupados por los valores de la columna seleccionada.

Expandir o contraer todos los grupos

Hay una manera rápida de mostrar u ocultar todas las agrupaciones en la vista actual. En la barra de herramientas de la ventana Subprocesos, seleccione Expandir grupos (icono de cuadro doble con el signo más) o Contraer grupos (icono de cuadro doble con el signo menos).

Buscar hilos

Puede buscar los subprocesos en la tabla de la ventana Subprocesos y buscar contenido específico en cualquiera de las columnas de tabla visibles. Al realizar la búsqueda, Visual Studio muestra las filas de hilos que tienen datos de columna que coinciden con la cadena de búsqueda. La búsqueda también examina la ubicación del subproceso, que aparece en la parte superior de la pila de llamadas en la columna Ubicación.

Buscar contenido específico en hilos

Hay varias maneras de buscar en hilos contenido específico. En la barra de herramientas de la ventana Subprocesos, escriba la cadena que se buscará en el cuadro Buscar y seleccione Entrar. Puede especificar letras, números y caracteres especiales como < en la cadena de búsqueda. Cuando se completa la búsqueda, la ventana Subprocesos actualiza la tabla para mostrar subprocesos con resultados coincidentes. Visual Studio resalta las instancias específicas que coinciden con la cadena de búsqueda. Para volver a la vista de subproceso normal, seleccione el icono X situado junto al cuadro de búsqueda.

También puede buscar una cadena que haya buscado anteriormente. Utilice el cuadro desplegable Buscar y seleccione una cadena de búsqueda utilizada anteriormente.

Buscar en toda la pila de llamadas

De forma predeterminada, no se busca en la pila de llamadas completa. Visual Studio busca una coincidencia solo en los subprocesos visibles en la tabla de la ventana Subprocesos.

Para incluir la pila de llamadas completa, seleccione Incluir pilas de llamadas en las búsquedas (icono de elemento de lista) en la barra de herramientas de la ventana Subprocesos. Cuando la opción está habilitada, el icono del elemento de lista tiene un borde.

Visualización de pilas de llamadas y cambiar entre marcos

En un programa multiproceso, cada subproceso tiene su propia pila de llamadas. La ventana Subprocesos proporciona un medio cómodo para ver estas pilas.

Sugerencia

Para obtener una representación visual de la pila de llamadas de cada subproceso, use la ventana Pilas paralelas.

Visualización de la pila de llamadas del subproceso

En la tabla de la ventana Subprocesos, busque el subproceso para el que quiera examinar la pila completa de llamadas. En la columna Ubicación, seleccione la flecha para expandir o contraer a la izquierda de la ubicación del hilo. La ubicación se expande para mostrar la pila de llamadas completa del subproceso. Vuelva a seleccionar la flecha para mostrar solo la ubicación.

Ver o contraer todas las pilas de llamadas

Puede controlar si la ventana Subprocesos siempre muestra las pilas de llamadas completas para todos los subprocesos de la tabla. En la barra de herramientas de la ventana Subprocesos, seleccione Expandir pilas de llamadas (icono de cuadro con el signo más) o Contraer pilas de llamadas (icono de cuadro con el signo menos).