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:
Exibição de threads mostra informações de pilha de chamadas para todos os threads no aplicativo. Permite navegar entre os threads e os registros de ativação nesses threads.
Exibição tarefas mostra as informações da pilha de chamadas centralizada por tarefas.
- No código gerenciado, a exibição Tarefas mostra pilhas de chamadas de objetos System.Threading.Tasks.Task.
- No código nativo, a exibição Tarefas mostra pilhas de chamadas de grupos de tarefas, algoritmos paralelos, agentes assíncronos e tarefas leves.
Exibição de Método dinamiza a pilha de chamadas em um método selecionado.
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:
Ícone | Control | Descrição |
---|---|---|
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. | |
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. | |
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. | |
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. | |
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. |
Ícone | Control | Descrição |
---|---|---|
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. | |
Controle de filtro | Mostra pilhas de chamadas apenas para o conjunto específico de threads em que você está interessado. | |
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. | |
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. | |
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. | |
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. |
|
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. | |
Salvar Controle | Permite salvar/exportar o conteúdo da janela de pilha paralela como uma imagem. | |
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 |
---|---|
Indica o local atual (registro de ativação ativo) do thread atual. | |
Indica o local atual (registro de ativação ativo) de um thread não atual. | |
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 |
---|---|
Indica o local atual (registro de ativação ativo) do thread atual. | |
Indica o local atual (registro de ativação ativo) de um thread não atual. | |
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. | |
Indica que o registro de ativação atual tem aviso de status crítico, como Deadlock. | |
Indica o nó com deadlock. | |
Indica que o registro de ativação atual tem informações adicionais, como Aguardando, Aguardando o bloqueio, Propriedade de etc. | |
Indica que a tarefa atual está em estado bloqueado/aguardando etc. | |
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.
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. |
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.
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.
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.
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.
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.
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.
- Tarefas de depuração com a janela Pilhas Paralelas
- Threads de depuração com a janela Pilhas Paralelas