Visualización de subprocesos y tareas en la ventana Pilas paralelas (C#, Visual Basic, C++)
La ventana Pilas paralelas es útil cuando se depuran aplicaciones multiproceso. Cuenta con varias vistas:
Vista de subprocesos: muestra información de la pila de llamadas de todos los subprocesos de la aplicación. Puede desplazarse entre los subprocesos y marcos de pila de esos subprocesos.
Vista de tareas: muestra información de la pila de llamadas centrada en la tarea.
- En código administrado, la Tareas muestra las pilas de llamadas de los objetos System.Threading.Tasks.Task.
- En código nativo, la vista Tareas muestra las pilas de llamadas de grupos de tareas, algoritmos paralelos, agentes asincrónicos y tareas ligeras.
Vista de método: dinamiza la pila de llamadas en un método seleccionado.
Usar la ventana Tareas paralelas
Para abrir la ventana Pilas paralelas, debe estar en una sesión de depuración. Seleccione Depurar>Windows>Pilas paralelas.
Controles de la barra de herramientas
La ventana Pilas paralelas tiene los siguientes controles de barra de herramientas:
Icono | Control | Descripción |
---|---|---|
Cuadro combinado Subprocesos/Tareas | Intercambia la vista entre las pilas de llamadas de subprocesos y las pilas de llamadas de tareas. Para obtener más información, vea Vista de tareas y Vista de subprocesos. | |
Mostrar marcadas únicamente | Solo muestra las pilas de llamadas de los subprocesos que están marcados en otras ventanas de depuración, por ejemplo, las ventanas Subprocesos de GPU e Inspección paralela. | |
Alternar vista de método | Cambia entre las vistas de pila de llamadas y la vista de método. Para obtener más información, vea Vista de método. | |
Desplazar automáticamente al marco de pila actual | Desplaza automáticamente el gráfico para que el marco de pila actual esté a la vista. Esta característica es útil cuando se cambia el marco de pila actual desde otras ventanas o cuando se alcanza un nuevo punto de interrupción en gráficos grandes. | |
Alternar control Zoom | Muestra u oculta el control de zoom situado a la izquierda de la ventana. Con independencia de la visibilidad del control de zoom, para hacer zoom también puede presionar Ctrl y girar la rueda del mouse o presionar Ctrl+Mayús ++para acercar y Ctrl+Mayús+- para alejar. |
Icono | Control | Descripción |
---|---|---|
Cuadro combinado Subprocesos/Tareas | Intercambia la vista entre las pilas de llamadas de subprocesos y las pilas de llamadas de tareas. Para obtener más información, vea Vista de tareas y Vista de subprocesos. | |
Control de filtro | Muestra las pilas de llamadas solo para el conjunto específico de subprocesos que le interesan. | |
Mostrar marcadas únicamente | Solo muestra las pilas de llamadas de los subprocesos que están marcados en otras ventanas de depuración, por ejemplo, las ventanas Subprocesos de GPU e Inspección paralela. | |
Alternar vista de método | Cambia entre las vistas de pila de llamadas y la vista de método. Para obtener más información, vea Vista de método. | |
Desplazar automáticamente al marco de pila actual | Desplaza automáticamente el gráfico para que el marco de pila actual esté a la vista. Esta característica es útil cuando se cambia el marco de pila actual desde otras ventanas o cuando se alcanza un nuevo punto de interrupción en gráficos grandes. | |
Alternar control Zoom | Muestra u oculta el control de zoom situado a la izquierda de la ventana. Con independencia de la visibilidad del control de zoom, para hacer zoom también puede presionar Ctrl y girar la rueda del mouse o presionar Ctrl+Mayús ++para acercar y Ctrl+Mayús+- para alejar. |
|
Control de búsqueda | Con esta característica, puede buscar fácilmente a través de marcos de pila y, a continuación, usar flechas para navegar entre esos resultados. | |
Control Guardar | Permite guardar o exportar el contenido desde la ventana de pila paralela como una imagen. | |
Control Mostrar código externo | Con esta característica, puede mostrar u ocultar las pilas del código o bibliotecas externos. |
Iconos de marco de pila
Los iconos siguientes proporcionan información sobre los marcos de pila activos y actuales en todas las vistas:
Iconos | Descripción |
---|---|
Indica la ubicación actual (marco de pila activo) del subproceso actual. | |
Indica la ubicación actual (marco de pila activo) de un subproceso no actual. | |
Indica el marco de pila actual (el contexto del depurador actual). El nombre del método está en negrita dondequiera que aparezca. |
Icono | Descripción |
---|---|
Indica la ubicación actual (marco de pila activo) del subproceso actual. | |
Indica la ubicación actual (marco de pila activo) de un subproceso no actual. | |
Indica el marco de pila actual (el contexto del depurador actual). El nombre del método está en negrita dondequiera que aparezca. | |
Indica que el marco de pila actual tiene una advertencia de estado crítico, como interbloqueo. | |
Indica el nodo de interbloqueo. | |
Indica que el marco de pila actual tiene información adicional como Esperando en, Esperando en bloqueo, propiedad de, etc. | |
Indica que la tarea actual está en estado bloqueado o en espera, etc. | |
Indica que la tarea se está ejecutando actualmente. |
Elementos del menú contextual
Los siguientes elementos de menú contextual están disponibles cuando se hace clic con el botón secundario en un método en la vista Subprocesos o en la vista Tareas. Los últimos seis elementos son los mismos que en la ventana Pila de llamadas.
Elemento de menú | Descripción |
---|---|
Marcar | Marca el elemento seleccionado. |
Quitar marcador | Quita la marca del elemento seleccionado. |
Inmovilizar | Inmoviliza el elemento seleccionado. |
Reanudar | Reanuda el elemento seleccionado. |
Cambiar a marco | Igual que el comando de menú correspondiente de la ventana Pila de llamadas. Sin embargo, en la ventana Pilas paralelas, un método puede estar en varios marcos. Puede seleccionar el marco que quiera en el submenú de este elemento. Si uno de los marcos de pila está en el subproceso actual, ese marco se selecciona de forma predeterminada en el submenú. |
Ir a tarea o Ir a subproceso | Cambia a la vista Tareas o Subprocesos y mantiene el mismo marco de pila resaltado. |
Ir al código fuente | Va a la ubicación correspondiente en la ventana de código fuente. |
Ir al desensamblado | Va a la ubicación correspondiente en la ventana Desensamblado. |
Mostrar código externo | Muestra u oculta el código externo. |
Presentación hexadecimal | Alterna entre la presentación hexadecimal y decimal. |
Mostrar subprocesos en código fuente | Marca la ubicación del subproceso en la ventana de código fuente. |
Información de carga de símbolos | Abre el cuadro de diálogo Información de carga de símbolos. |
Configuración de símbolos | Abre el cuadro de diálogo Configuración de símbolos. |
Elemento de menú | Descripción |
---|---|
Copiar | Copiar el elemento seleccionado. |
Seleccionar todos los fotogramas siguientes | Selecciona todos los fotogramas bajo la pila seleccionada. |
Marcar | Marca el elemento seleccionado. |
Quitar marcador | Quita la marca del elemento seleccionado. |
Inmovilizar | Inmoviliza el elemento seleccionado. |
Reanudar | Reanuda el elemento seleccionado. |
Cambiar a marco | Igual que el comando de menú correspondiente de la ventana Pila de llamadas. Sin embargo, en la ventana Pilas paralelas, un método puede estar en varios marcos. Puede seleccionar el marco que quiera en el submenú de este elemento. Si uno de los marcos de pila está en el subproceso actual, ese marco se selecciona de forma predeterminada en el submenú. |
Ir a tarea o Ir a subproceso | Cambia a la vista Tareas o Subprocesos y mantiene el mismo marco de pila resaltado. |
Ir al código fuente | Va a la ubicación correspondiente en la ventana de código fuente. |
Ir al desensamblado | Va a la ubicación correspondiente en la ventana Desensamblado. |
Mostrar código externo | Muestra u oculta el código externo. |
Presentación hexadecimal | Alterna entre la presentación hexadecimal y decimal. |
Mostrar subprocesos en código fuente | Marca la ubicación del subproceso en la ventana de código fuente. |
Información de carga de símbolos | Abre el cuadro de diálogo Información de carga de símbolos. |
Configuración de símbolos | Abre el cuadro de diálogo Configuración de símbolos. |
Vista de subprocesos
En la vista Subprocesos, el marco de pila y la ruta de acceso de llamada del subproceso actual se resaltan en azul. La ubicación actual del subproceso se muestra mediante la flecha amarilla.
Para cambiar el marco de pila actual, haga doble clic en un método diferente. Esta acción también podría cambiar el subproceso actual, dependiendo de si el método que seleccione forma parte del subproceso actual o de otro subproceso.
Cuando el gráfico de vista Subprocesos es tan grande que no cabe en la ventana, en la ventana aparece un control vista de pájaro. Puede desplazar el marco del control para desplazarse por distintas partes del gráfico.
En la ilustración siguiente se muestra un subproceso que pasa por una transición de código principal, administrado y nativo. Hay seis subprocesos en el método actual. Uno sigue hasta Thread.Sleep y otro continúa hacia Console.WriteLine y luego hacia SyncTextWriter.WriteLine.
En la tabla siguiente se describen las características principales de la vista Subprocesos:
Llamada | Nombre del elemento | Descripción |
---|---|---|
1 | Nodo o segmento de pila de llamadas | Contiene una serie de métodos para uno o más subprocesos. Si el marco no tiene ninguna línea de flecha conectada, representa la ruta de acceso completa de la llamada de los subprocesos. |
2 | Resaltado azul | Indica la ruta de acceso de la llamada del subproceso actual. |
3 | Líneas de flecha | Conecta nodos para recuperar la ruta de acceso completa de la llamada de subprocesos. |
4 | Encabezado de nodo | Muestra el número de procesos y subprocesos del nodo. |
5 | Método | Representa uno o más marcos de pila del mismo método. |
6 | Información sobre herramientas en el método | Aparece cuando se mantiene el mouse sobre un método. En la vista Subprocesos, la información sobre herramientas muestra todos los subprocesos de una tabla de modo similar a la ventana de Subprocesos. |
En la ilustración siguiente se muestra un subproceso que pasa por una transición de código principal, administrado y nativo. Hay cinco subprocesos en el método actual. Uno continúa con ServerClass.InstanceMethod y otro continúa con Worker.Thread.Start y, a continuación, hasta StartupHook.Initialize.AnonymousMethod.
En la tabla siguiente se describen las características principales de la vista Subprocesos:
Llamada | Nombre del elemento | Descripción |
---|---|---|
1 | Nodo o segmento de pila de llamadas | Contiene una serie de métodos para uno o más subprocesos. Si el marco no tiene ninguna línea de flecha conectada, representa la ruta de acceso completa de la llamada de los subprocesos. |
2 | Resaltado azul | Indica la ruta de acceso de la llamada del subproceso actual. |
3 | Líneas de flecha | Conecta nodos para recuperar la ruta de acceso completa de la llamada de subprocesos. |
4 | Encabezado de nodo | Muestra el número de procesos o subprocesos, nombre de subproceso e identificador de subproceso para el nodo. |
5 | Método | Representa uno o más marcos de pila del mismo método. |
6 | Información sobre herramientas en el método | Aparece cuando se mantiene el mouse sobre un método. En la vista Subprocesos, la información sobre herramientas muestra todos los subprocesos de una tabla de modo similar a la ventana de Subprocesos. |
Vista de tareas
Si la aplicación usa objetos System.Threading.Tasks.Task (código administrado) u objetos task_handle
(código nativo) para expresar el paralelismo, puede usar la vista Tareas. La vista de tareas muestra las pilas de llamadas de las tareas en lugar de los subprocesos.
En la vista Tareas:
- No se muestran las pilas de llamadas de los subprocesos que no están ejecutando tareas.
- Las pilas de llamadas de los subprocesos que ejecutan tareas se recortan visualmente en la parte superior e inferior para mostrar los marcos más pertinentes para las tareas.
- Cuando hay varias tareas en un subproceso, las pilas de llamadas de esas tareas se muestran en distintos nodos.
Para ver una pila de llamadas completa, vuelva a la vista Subprocesos; para ello, haga clic con el botón secundario en un marco de pila y seleccione Ir a subproceso.
En la ilustración siguiente se muestra la vista Subprocesos en la parte superior y la vista Tareas correspondiente en la parte inferior.
Mantenga el mouse sobre un método para mostrar información sobre herramientas con información adicional. En la vista Tareas, en la información sobre herramientas, se muestran todas las tareas de una tabla, de forma similar a la ventana Tareas.
En la imagen siguiente se muestra la información sobre herramientas de un método en la vista Subprocesos en la parte superior y de la vista Tareas correspondiente en la parte inferior.
Vista de método
Desde la vista Subprocesos o la vista Tareas, puede dinamizar el gráfico del método actual seleccionando el icono Alternar vista de método. La vista de método muestra de una ojeada todos los métodos de todos los subprocesos que llaman o a los que llama el método actual. En la ilustración siguiente se muestra cómo aparece la misma información en la vista Subprocesos a la izquierda y en la Vista de método a la derecha.
Si cambia a un nuevo marco de pila, lo convierte en el método actual y en Vista de método se muestra todos los llamadores y destinatarios del nuevo método. Esto puede hacer que algunos subprocesos aparezcan o desaparezcan de la vista, dependiendo de si ese método aparece en sus pilas de llamadas. Para volver a la vista Pila de llamadas, vuelva a seleccionar el icono Vista de método de la barra de herramientas.
Tutorial de depuración de subprocesos y tareas con pilas paralelas
En estos tutoriales en vídeo se muestra cómo puede usar las vistas Subprocesos y Tareas de la ventana Pilas paralelas de Visual Studio 2022 para depurar las aplicaciones multiproceso.
- Depuración de tareas con la ventana Pilas paralelas
- Depuración de subprocesos con la ventana Pilas paralelas