Visualizar threads e tarefas na janela Pilhas Paralelas (C#, Visual Basic, C++)
A janela Parallel Stacks é útil para depurar aplicações multithread. Tem várias vistas:
Visão de Threads mostra informações da pilha de chamadas para todas as threads na aplicação. Você pode navegar entre threads e quadros de pilha nesses threads.
Vista de Tarefas mostra informações da pilha de chamadas centradas em tarefas.
- No código gerido, a visão Tarefas mostra as pilhas de chamadas de objetos System.Threading.Tasks.Task.
- Em código nativo, exibição Tarefas mostra pilhas de chamadas de grupos de tarefas , algoritmos paralelos, agentes assíncronose tarefas leves.
Vista de Método centraliza a pilha de chamadas sobre um método selecionado.
Use a janela Pilhas Paralelas
Para abrir a janela Parallel Stacks, deve estar em uma sessão de depuração. Selecione Depurar>Windows>Parallel Stacks.
Controles da barra de ferramentas
A janela Parallel Stacks tem os seguintes controles de barra de ferramentas:
Ícone | Controlo | Descrição |
---|---|---|
![]() |
Threads/Tarefas caixa de seleção combinada | Alterna a exibição entre pilhas de chamadas de threads e pilhas de chamadas de tarefas. Para obter mais informações, consulte vista de Tarefas e vista de Threads. |
![]() |
Mostrar apenas os itens sinalizados | Mostra pilhas de chamadas apenas para os threads sinalizados em outras janelas do depurador, como a janela GPU Threads e a janela Parallel Watch. |
![]() |
Alternar modo de exibição de método | Alterna entre exibições de pilha de chamadas e visualização de método . Para obter mais informações, consulte Method View. |
![]() |
Rolagem automática para o quadro de pilha atual | Rola automaticamente o gráfico para que o quadro de pilha atual esteja em exibição. Esse recurso é útil quando você altera o quadro de pilha atual de outras janelas ou quando atinge um novo ponto de interrupção em gráficos grandes. |
![]() |
Alternar o controle de zoom | Mostra ou oculta o controle de zoom à esquerda da janela. Independentemente da visibilidade do controle de zoom, você também pode ampliar pressionando Ctrl e girando a roda do mouse, ou pressionando Ctrl+Shift++ para aumentar o zoom e Ctrl+Shift+- para reduzir. |
Ícone | Controlo | Descrição |
---|---|---|
![]() |
Threads/Tarefas caixa de seleção combinada | Alterna a exibição entre pilhas de chamadas de threads e pilhas de chamadas de tarefas. Para obter mais informações, consulte vista de Tarefas e vista de Threads. |
![]() |
Filtro Controlo | Mostra pilhas de chamadas apenas para o conjunto específico de threads em que você está interessado. |
![]() |
Mostrar apenas os itens sinalizados | Mostra pilhas de chamadas apenas para os threads sinalizados em outras janelas do depurador, como a janela GPU Threads e a janela Parallel Watch. |
![]() |
Alternar modo de exibição de método | Alterna entre exibições de pilha de chamadas e visualização de método . Para obter mais informações, consulte Method View. |
![]() |
Rolagem automática para o quadro de pilha atual | Rola automaticamente o gráfico para que o quadro de pilha atual esteja em exibição. Esse recurso é útil quando você altera o quadro de pilha atual de outras janelas ou quando atinge um novo ponto de interrupção em gráficos grandes. |
![]() |
Alternar o controle de zoom | Mostra ou oculta o controle de zoom à esquerda da janela. Independentemente da visibilidade do controle de zoom, você também pode ampliar pressionando Ctrl e girando a roda do mouse, ou pressionando Ctrl+Shift++ para aumentar o zoom e Ctrl+Shift+- para reduzir. |
![]() |
Controlo de Pesquisa | Com esse recurso, você pode pesquisar facilmente através de quadros de pilha e, em seguida, usar setas para navegar entre esses resultados. |
![]() |
Guardar Controlo | Permite-lhe guardar/exportar o conteúdo da janela de pilha paralela como uma imagem. |
![]() |
Mostrar controle de código externo | Usando este recurso, pode mostrar/ocultar as pilhas do código ou das bibliotecas externas. |
![]() |
Resumir pilhas de chamadas | A partir do Visual Studio 2022 versão 17.13 Preview 4, você pode escolher Resumir quando Copilot estiver instalado e ativado. Este botão abre a janela do Copilot Chat, pré-carregada com contexto relevante de thread, permitindo que o utilizador explore detalhes, incluindo os estados das threads, chamadas de função e correções sugeridas. |
Ícones de quadro de pilha
Os ícones a seguir fornecem informações sobre os quadros de pilha ativos e atuais em todos os modos de exibição:
Ícone | Descrição |
---|---|
![]() |
Indica o local atual (quadro de pilha ativo) do thread atual. |
![]() |
Indica a localização atual (quadro de pilha ativo) de um thread não em execução atualmente. |
![]() |
Indica o quadro de pilha atual (o contexto atual do depurador). O nome do método está em negrito onde quer que apareça. |
Ícone | Descrição |
---|---|
![]() |
Indica o local atual (quadro de pilha ativo) do thread atual. |
![]() |
Indica a localização atual (quadro de pilha ativo) de um thread não em execução atualmente. |
![]() |
Indica o quadro de pilha atual (o contexto atual do depurador). O nome do método está em negrito onde quer que apareça. |
![]() |
Indica que o quadro de pilha atual tem aviso de status Crítico, como Deadlock. |
![]() |
Indica o nó bloqueado. |
![]() |
Indica que o quadro de pilha atual tem informações adicionais, como Em espera por, Aguardar no bloqueio, pertencente a, etc. |
![]() |
Indica que a tarefa atual está no estado bloqueado/em espera, etc. |
![]() |
Indica a tarefa em execução no momento. |
Itens do menu de contexto
Os seguintes itens de menu de atalho estão disponíveis quando você clica com o botão direito do mouse em um método no modo de exibição Threads ou modo de exibição Tarefas. Os últimos seis itens são os mesmos que na Janela de Pilha de Chamadas.
Item de menu | Descrição |
---|---|
Bandeira | Sinaliza o item selecionado. |
Desmarcar | Desmarca o item selecionado. |
Congelar | Congela o item selecionado. |
Descongelar | Descongela o item selecionado. |
Mudar para o quadro | O mesmo que o comando de menu correspondente na janela Call Stack. No entanto, na janela Parallel Stacks, um método pode estar em vários quadros. Você pode selecionar o quadro desejado no submenu para este item. Se um dos quadros de pilha estiver no thread atual, esse quadro será selecionado por padrão no submenu. |
Ir para a tarefa ou Ir para a conversa | Alterna para a vista de Tarefas ou de Threads , mantendo o mesmo quadro de pilha realçado. |
Ir para o código-fonte | Vai para o local correspondente na janela do código-fonte. |
Ir para a desmontagem | Vai para o local correspondente na janela Desmontagem. |
Mostrar código externo | Mostra ou oculta código externo. |
Exibição hexadecimal | Alterna entre exibição decimal e hexadecimal. |
Mostrar discussões na fonte | Sinaliza o local do thread na janela do código-fonte. |
Informações de carregamento de símbolos | Abre a caixa de diálogo Informações de Carregamento de Símbolos . |
Configurações de símbolos | Abre a caixa de diálogo Configurações de Símbolo. |
Item de menu | Descrição |
---|---|
Cópia | Copie o item selecionado. |
selecione todos os quadros abaixo | Seleciona todas as frames da pilha selecionada. |
Bandeira | Sinaliza o item selecionado. |
Desmarcar | Desmarca o item selecionado. |
Congelar | Congela o item selecionado. |
Descongelar | Descongela o item selecionado. |
Mudar para o quadro | O mesmo que o comando de menu correspondente na janela Call Stack. No entanto, na janela Parallel Stacks, um método pode estar em vários quadros. Você pode selecionar o quadro desejado no submenu para este item. Se um dos quadros de pilha estiver no thread atual, esse quadro será selecionado por padrão no submenu. |
Ir para a tarefa ou Ir para a conversa | Alterna para a vista de Tarefas ou de Threads , mantendo o mesmo quadro de pilha realçado. |
Ir para o código-fonte | Vai para o local correspondente na janela do código-fonte. |
Ir para a desmontagem | Vai para o local correspondente na janela Desmontagem. |
Mostrar código externo | Mostra ou oculta código externo. |
Exibição hexadecimal | Alterna entre exibição decimal e hexadecimal. |
Mostrar discussões na fonte | Sinaliza o local do thread na janela do código-fonte. |
Informações de carregamento de símbolos | Abre a caixa de diálogo Informações de Carregamento de Símbolos . |
Configurações de símbolos | Abre a caixa de diálogo Configurações de Símbolo. |
Visualização de tópicos
Na visualização Threads, o quadro da pilha e o caminho da chamada do thread atual são realçados em azul. A localização atual do segmento é mostrada pela seta amarela.
Para alterar o quadro de pilha atual, clique duas vezes em um método diferente. Isso também pode alternar o thread atual, dependendo se o método selecionado faz parte do thread atual ou de outro thread.
Quando o gráfico de visualização de Threads é demasiado grande para caber na janela, surge um controlo de "Vista Panorâmica" na janela. Você pode mover o quadro no controle para navegar para diferentes partes do gráfico.
A ilustração a seguir mostra um thread que vai de Main para uma transição de código gerenciado para nativo. Seis threads estão no método atual. Dois threads continuam a usar Thread.Sleep, dois continuam a usar Console.WriteLine, e o thread atual continua a usar SyncTextWriter.WriteLine.
A tabela a seguir descreve as principais características da visualização Threads:
Chamada | Nome do elemento | Descrição |
---|---|---|
1 | Segmento ou nó da pilha de chamadas | Contém uma série de métodos para um ou mais threads. Se o quadro não tiver linhas de seta conectadas a ele, o quadro mostrará todo o caminho de chamada para o(s) thread(s). |
2 | Destaque azul | Indica o caminho de chamada do thread atual. |
3 | Linhas de seta | Conecte nós para compor todo o caminho de chamada para o(s) thread(s). |
4 | Cabeçalho do nó | Mostra o número de processos e threads para o nó. |
5 | Método | Representa um ou mais quadros de pilha no mesmo método. |
6 | Dica de ferramenta sobre o método | Aparece quando você passa o mouse sobre um método. No modo de exibição Threads, a dica de ferramenta mostra todos os threads, em uma tabela semelhante à janela Threads. |
A ilustração a seguir mostra o thread principal em uma transição de código gerenciado para nativo. Cinco threads estão no método atual. Quatro threads continuam sendo executados no contexto do método S.C, enquanto um thread de trabalho continua em uma transição de código gerenciado para nativo, definindo o nome em um thread de trabalho.
A tabela a seguir descreve as principais características da visualização Threads:
Chamada | Nome do elemento | Descrição |
---|---|---|
1 | Segmento ou nó da pilha de chamadas | Contém uma série de métodos para um ou mais threads. Se o quadro não tiver linhas de seta conectadas a ele, o quadro mostrará todo o caminho de chamada para o(s) thread(s). |
2 | Destaque azul | Indica o caminho de chamada do thread atual. |
3 | Linhas de seta | Conecte nós para compor todo o caminho de chamada para o(s) thread(s). |
4 | Cabeçalho do nó | Mostra o número de processos/threads, o nome da thread e o ID da thread para o nó. |
5 | Método | Representa um ou mais quadros de pilha no mesmo método. |
6 | Dica de ferramenta sobre o método | Aparece quando você passa o mouse sobre um método. No modo de exibição Threads, a dica de ferramenta mostra todos os threads, em uma tabela semelhante à janela Threads. |
7 | Descrição do tópico | Descrição do thread gerada por IA. A partir do Visual Studio 2022 versão 17.13 Preview 1, esta descrição está presente quando Copilot é instalado e ativado. |
Vista de tarefas
Se seu aplicativo usa objetos System.Threading.Tasks.Task (código gerenciado) ou objetos task_handle
(código nativo) para expressar paralelismo, você pode usar exibição Tarefas.
Tarefas exibição mostra pilhas de chamadas de tarefas em vez de threads.
Na vista de Tarefas :
- Pilhas de chamadas de threads que não estão a executar tarefas não são mostradas.
- As pilhas de chamadas de threads que estão a executar tarefas são encurtadas visualmente na parte superior e inferior para mostrar os frames mais relevantes para as tarefas.
- Quando várias tarefas estão num encadeamento, as pilhas de chamadas dessas tarefas são mostradas em nós separados.
Para ver uma pilha de chamadas inteira, mude de volta para a visualização Threads clicando com o botão direito do mouse num quadro de pilha e selecionando Ir para Thread.
A ilustração a seguir mostra o modo de exibição Threads na parte superior e o modo de exibição Tarefas correspondente na parte inferior.
Passe o cursor sobre um método para mostrar uma dica de ferramenta com informações adicionais. Na vista Tarefas, a dica de ferramenta mostra todas as tarefas numa tabela semelhante à da janela Tarefas.
A imagem a seguir mostra a dica de ferramenta para um método na visão Threads na parte superior e para a visão correspondente Tarefas na parte inferior.
Visualização do método
A partir da vista Threads ou vista Tarefas, pode dinamizar o gráfico no método atual selecionando o ícone Toggle Method View na barra de ferramentas. Vista de Método mostra de relance todos os métodos em todos os threads que chamam ou são chamados pelo método atual. A ilustração a seguir mostra como as mesmas informações aparecem na vista Threads à esquerda e na vista de Método à direita.
Se você alternar para um novo quadro de pilha, você torna esse método o método atual e de exibição de método mostra todos os chamadores e destinatários para o novo método. Isso pode fazer com que alguns threads apareçam ou desapareçam da exibição, dependendo se esse método aparece em suas pilhas de chamadas. Para retornar à exibição da pilha de chamadas, selecione novamente o ícone da barra de ferramentas Method View.
Depurar threads e tarefas com pilhas paralelas vídeo tutorial
Estes tutoriais em vídeo demonstram como os/as utilizadores podem usar as vistas Threads e Tarefas da janela Pilhas Paralelas no Visual Studio 2022 para depurar os seus aplicativos multithread.
- Tarefas de Depuração com a janela Pilhas Paralelas
- Depuração de threads com a janela Pilhas paralelas