Exibir threads e tarefas na janela Pilhas Paralelas (C#, Visual Basic, C++)

A janela Pilhas Paralelas é útil quando você está depurando aplicativos multithreaded. Ela tem várias exibições:

Usar a janela Pilhas Paralelas

Para abrir a janela Pilhas Paralelas, você deve estar em uma sessão de depuração. Selecione Depurar>Janelas>Pilhas Paralelas.

Controles da barra de ferramentas

A janela Pilhas Paralelas tem os seguintes controles de barra de ferramentas:

Screenshot of Toolbar in Parallel Stacks window.

Ícone Control Descrição
Threads/Tasks combo box Caixa de combinação Threads/Tarefas Alterna a exibição entre pilhas de chamadas de threads e pilhas de chamadas de tarefas. Para obter mais informações, confira Exibição de tarefas e Exibição de threads.
Show Only Flagged icon Mostrar somente sinalizados Mostra pilhas de chamadas apenas para os threads sinalizados em outras janelas de depuração, como a janela Threads da GPU e a janela Inspeção Paralela.
Toggle Method View icon Alternar Exibição do Método Alterna entre exibições de pilha de chamadas e Exibição de Método. Para obter mais informações, confira Exibição do Método.
Auto Scroll to Current icon Autorrolagem para Quadro de Pilha Atual Rola automaticamente o grafo de forma que o registro de ativação atual esteja em exibição. Este recurso é útil quando você modifica o registro de ativação atual de outras janelas ou quando você atinge um novo ponto de interrupção em grandes grafos.
Toggle Zoom icon Ativar/Desativar 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 ampliar, e Ctrl+Shift+- para afastar.

Screenshot of Toolbar in Parallel Stacks window 2022.

Ícone Control Descrição
Threads/Tasks combo box Caixa de combinação Threads/Tarefas Alterna a exibição entre pilhas de chamadas de threads e pilhas de chamadas de tarefas. Para obter mais informações, confira Exibição de tarefas e Exibição de threads.
Filter icon Controle de filtro Mostra pilhas de chamadas apenas para o conjunto específico de threads em que você está interessado.
Show Only Flagged icon Mostrar somente sinalizados Mostra pilhas de chamadas apenas para os threads sinalizados em outras janelas de depuração, como a janela Threads da GPU e a janela Inspeção Paralela.
Toggle Method View icon Alternar Exibição do Método Alterna entre exibições de pilha de chamadas e Exibição de Método. Para obter mais informações, confira Exibição do Método.
Auto Scroll to Current icon Autorrolagem para Quadro de Pilha Atual Rola automaticamente o grafo de forma que o registro de ativação atual esteja em exibição. Este recurso é útil quando você modifica o registro de ativação atual de outras janelas ou quando você atinge um novo ponto de interrupção em grandes grafos.
Toggle Zoom icon Ativar/Desativar 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 ampliar, e Ctrl+Shift+- para afastar.
Search icon Pesquisar no Controle Com esse recurso, você pode pesquisar facilmente por meio de registros de ativação e, em seguida, usar setas para navegar entre esses resultados.
Save icon Salvar Controle Permite salvar/exportar o conteúdo da janela de pilha paralela como uma imagem.
External Code icon Mostrar Controle de Código Externo Usando esse recurso, você pode mostrar/ocultar as pilhas das bibliotecas/código externos.

Ícones do Registro de Ativação

Os ícones a seguir fornecem informações sobre os registros de ativação ativos e atuais em todos os modos de exibição:

ícone Descrição
Yellow arrow Indica o local atual (registro de ativação ativo) do thread atual.
Threads icon Indica o local atual (registro de ativação ativo) de um thread não atual.
Green arrow Indica o registro de ativação atual (o contexto atual do depurador). O nome do método fica em negrito onde quer que apareça.
ícone Descrição
Yellow arrow Indica o local atual (registro de ativação ativo) do thread atual.
Threads icon Indica o local atual (registro de ativação ativo) de um thread não atual.
Green arrow Indica o registro de ativação atual (o contexto atual do depurador). O nome do método fica em negrito onde quer que apareça.
Status Error Indica que o registro de ativação atual tem aviso de status crítico, como Deadlock.
Status Excluded Indica o nó com deadlock.
Status Information Indica que o registro de ativação atual tem informações adicionais, como Aguardando, Aguardando o bloqueio, Propriedade de etc.
Status Blocked Indica que a tarefa atual está em estado bloqueado/aguardando etc.
Status Running Indica a tarefa em execução no momento.

Itens de menu de contexto

Os itens do menu de atalho a seguir ficam disponíveis quando você clica com o botão direito do mouse em um método na exibição Threads ou Tarefas. Os últimos seis itens são os mesmos da janela Pilha de Chamadas.

Screenshot of Shortcut menu in Parallel Stacks window.

Item de menu Descrição
Sinalizador Sinaliza o item selecionado.
Remover Sinalização Remove a sinalização do item selecionado.
Congelamento Congela o item selecionado.
Descongelar Descongela o item selecionado.
Alternar para Quadro O mesmo que o comando do menu correspondente na janela Pilha de Chamadas. No entanto, na janela Pilhas Paralelas, um método pode estar em vários quadros. Você pode selecionar o quadro desejado no submenu desse item. Se um dos registros de ativação estiver no thread atual, esse registro será selecionado por padrão no submenu.
Ir para Tarefa ou Ir para o Thread Alterna para a exibição Tarefa ou Threads e mantém o mesmo registro de ativação realçado.
Ir para Código Fonte Vai para o local correspondente na janela do código-fonte.
Ir para Desmontagem Vai para o local correspondente na janela do Desmontagem.
Mostrar Código Externo Mostra ou oculta o código externo.
Exibição Hexadecimal Alterna entre a exibição decimal e hexadecimal.
Mostrar Threads na Origem Sinaliza o local do thread na janela de código-fonte.
Informações de Carregamento de Símbolos Abre a caixa de diálogo Informações de Carga do Símbolo.
Configurações de Símbolo Abre a caixa de diálogo Configurações do Símbolo.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

Item de menu Descrição
Copy Copie o item selecionado.
Selecionar todos os registros abaixo Seleciona todos os registros na pilha selecionada.
Sinalizador Sinaliza o item selecionado.
Remover Sinalização Remove a sinalização do item selecionado.
Congelamento Congela o item selecionado.
Descongelar Descongela o item selecionado.
Alternar para Quadro O mesmo que o comando do menu correspondente na janela Pilha de Chamadas. No entanto, na janela Pilhas Paralelas, um método pode estar em vários quadros. Você pode selecionar o quadro desejado no submenu desse item. Se um dos registros de ativação estiver no thread atual, esse registro será selecionado por padrão no submenu.
Ir para Tarefa ou Ir para o Thread Alterna para a exibição Tarefa ou Threads e mantém o mesmo registro de ativação realçado.
Ir para Código Fonte Vai para o local correspondente na janela do código-fonte.
Ir para Desmontagem Vai para o local correspondente na janela do Desmontagem.
Mostrar Código Externo Mostra ou oculta o código externo.
Exibição Hexadecimal Alterna entre a exibição decimal e hexadecimal.
Mostrar Threads na Origem Sinaliza o local do thread na janela de código-fonte.
Informações de Carregamento de Símbolos Abre a caixa de diálogo Informações de Carga do Símbolo.
Configurações de Símbolo Abre a caixa de diálogo Configurações do Símbolo.

exibição Threads

Na exibição Threads, o registro de ativação e o caminho de chamada do thread atual são realçados em azul. O local atual do thread é mostrado pela seta amarela.

Para alterar o registro de ativação 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 a exibição Threads é muito grande para caber na janela, um controle de Vista Panorâmica aparece na janela. Você pode mover o quadro no controle para navegar até diferentes partes do grafo.

A ilustração a seguir mostra um thread que vai de Principal para uma transição de código Gerenciado para Nativo. Seis threads estão no método atual. Um continua para Thread.Sleep e outro continua para Console.WriteLine e, em seguida, para SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

A tabela a seguir descreve os principais recursos da exibição Threads:

Balão 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á o caminho inteiro de chamada para os threads.
2 Realce azul Indica o caminho da chamada do thread atual.
3 Linhas de seta Conecte os nós para compor o caminho inteiro de chamada para os threads.
4 Cabeçalho do nó Mostra o número de processos e threads para o nó.
5 Método Representa uma 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. Na exibição Threads, a dica de ferramenta mostra todos os threads, em uma tabela semelhante à janela Threads.

A ilustração a seguir mostra um thread que vai de Principal para uma transição de código Gerenciado para Nativo. Cinco threads estão no método atual. Um continua para ServerClass.InstanceMethod, e outro continua para Worker.Thread.Start e, depois, para StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

A tabela a seguir descreve os principais recursos da exibição Threads:

Balão 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á o caminho inteiro de chamada para os threads.
2 Realce azul Indica o caminho da chamada do thread atual.
3 Linhas de seta Conecte os nós para compor o caminho inteiro de chamada para os threads.
4 Cabeçalho do nó Mostra o número de processos/threads, o nome do thread e a ID do thread para o nó.
5 Método Representa uma 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. Na exibição Threads, a dica de ferramenta mostra todos os threads, em uma tabela semelhante à janela Threads.

Exibição de tarefas

Se seu aplicativo usar objetos System.Threading.Tasks.Task (código gerenciado) ou objetos task_handle (código nativo) para expressar paralelismo, você pode usar a exibição Tarefas. A exibição de Tarefas mostra as pilhas de chamadas de tarefas reais em vez de threads.

Na exibição Tarefas:

  • As pilhas de chamadas de threads que não estão executando tarefas não são mostradas.
  • As pilhas de chamadas de threads que estão executando tarefas serão cortadas visualmente na parte superior e inferior para mostrar os quadros mais relevantes que pertencem a tarefas.
  • Quando várias tarefas estiverem em um thread, as pilhas de chamadas dessas tarefas serão divididas em nós separados.

Para ver a pilha de chamadas inteira, alterne de volta para a exibição Threads clicando com o botão direito em um registro de ativação e selecionando Ir para Thread.

A ilustração a seguir mostra a exibição Threads na parte superior e a exibição Tarefas correspondente na parte inferior.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

Passe o mouse sobre um método para mostrar uma dica de ferramenta com informações adicionais. Na exibição Tarefas, a dica de ferramenta mostra todas as tarefas em uma tabela semelhante à janela Tarefas.

A imagem a seguir mostra a dica de ferramenta de um método na exibição Threads na parte superior e para a exibição Tarefas correspondente na parte inferior.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Modo de Exibição do Método

Da exibição Threads ou Tarefas, você pode girar o grafo no método atual selecionando o ícone Alternar a Exibição do Método na barra de ferramentas. A Exibição do Método mostra rapidamente todos os métodos em todos os threads que chamam ou são chamados pelo método atual. A ilustração a seguir mostra a aparência das mesmas informações na exibição Threads à esquerda e na exibição de Método à direita.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

Se você alternar para um novo registro de ativação, você tornará esse o método atual e a exibição Método mostrará todos os chamadores e chamados para o novo método. Isso pode fazer os threads serem exibidos ou desaparecerem da exibição, dependendo se esse método for exibido em suas pilhas de chamadas. Para retornar à exibição de pilha de chamadas, selecione o ícone da barra de ferramentas de exibição de Método novamente.

Tutorial em vídeo sobre como depurar threads e tarefas com pilhas paralelas

Estes tutoriais em vídeo demonstram como você pode usar as exibições Threads e Tarefas da janela Pilhas Paralelas no Visual Studio 2022 para depurar seus aplicativos em vários threads.