Compartilhar via


Exibir threads no depurador do Visual Studio (C#, Visual Basic, C++)

A janela Threads no depurador do Visual Studio permite examinar e trabalhar com threads no aplicativo que você está depurando. A janela fornece recursos para agrupar, classificar, sinalizar, congelar, descongelar e pesquisar threads em seu código e exibir pilhas de chamadas.

A janela Threads está disponível somente enquanto o depurador do Visual Studio está em execução. Durante uma sessão de depuração, você pode abrir a janela selecionando Depurar>Windows>Threads.

Este artigo descreve como trabalhar com a janela Threads para seus programas C#, Visual Basic ou C++. No entanto, a exibição Threads na janela Pilhas Paralelas geralmente é mais útil para depuração. Para obter mais informações, consulte Depurar um deadlock usando a exibição threads e exibir threads e tarefas na janela Pilhas Paralelas.

Explorar a tabela da janela Threads

A janela Threads apresenta uma tabela em que cada linha corresponde a um thread separado em seu aplicativo. No modo de exibição padrão, a tabela mostra todos os threads em seu aplicativo. Você pode definir as configurações da tabela para mostrar apenas os threads que lhe interessam. A tabela fornece várias colunas para descrever os threads em detalhes. Você pode ajustar o posicionamento da coluna e ocultar colunas desnecessárias.

A tabela a seguir descreve todas as colunas disponíveis para a tabela de janela Threads e indica se a coluna está visível ou oculta no modo de exibição padrão. As colunas são listadas de acordo com a posição padrão da tabela da esquerda para a direita.

Coluna Padrão Descrição
Sinalizar Visível, sem rótulo Bandeiras vermelhas nesta coluna indicam tópicos marcados para atenção especial. Selecione a bandeira (a cor do ícone muda para vermelho) para marcar ou desmarcar (o ícone muda para o contorno de bandeira) um thread. O ícone de sinalizador colorido ajuda a distinguir um thread marcado de outros threads na tabela. Para obter mais informações, confira Sinalizar e remover o sinalizador de threads.
Thread atual Visível, sem rótulo O ícone de seta amarela nesta coluna indica o thread atual no aplicativo em execução no depurador. Um ícone de contorno de seta nesta coluna indica o contexto atual do depurador para um thread não atual.
ID Visível Fornece o número de identificação para cada thread.
ID gerenciada Visível Exibe os números de identificação gerenciados para threads gerenciados.
Categoria Visível Indica a categoria de threads, diferenciando-as em interface do usuário, manipuladores de chamadas de procedimento remoto ou threads de trabalho. Uma categoria especial identifica o thread principal do aplicativo.
Nome Visível Identifica cada thread pelo nome ou <Nenhum Nome> se o thread não tiver nenhum nome especificado. Quando um thread não existe mais, o thread tem o rótulo [Thread Destroyed].
Local Visível Mostra onde o thread está em execução na pilha de chamadas do aplicativo. Selecione a seta suspensa para ver a pilha de chamadas completa do thread. Quando um thread não existe mais, o local é rotulado como <não disponível>.
Prioridade Escondido Exibe a prioridade ou precedência atribuída pelo sistema a cada thread.
Máscara de afinidade Escondido Mostra a máscara de afinidade do processador para cada thread. Em um sistema multiprocessador, a máscara de afinidade determina os processadores nos quais um thread pode ser executado.
Contagem Suspensa Escondido Fornece a contagem suspensa. Essa contagem determina se um thread pode ser executado. Para obter mais informações, confira Congelar e descongelar threads.
Nome do Processo Escondido Exibe o processo ao qual cada thread pertence. Os dados nesta coluna podem ser úteis quando você está depurando muitos processos.
ID do Processo Escondido Mostra a ID do processo à qual cada thread pertence.
Qualificador de Transporte Escondido Identifica exclusivamente o computador ao qual o depurador está conectado.

Mostrar e ocultar colunas de tabela

Na barra de ferramentas da janela Threads, o menu suspenso Colunas mostra as colunas disponíveis. Expanda a lista suspensa e selecione um nome de coluna para alternar a visibilidade dele na tabela. Colunas visíveis são indicadas com uma marca de seleção na lista.

Sinalizar threads para atenção especial

Use o ícone de bandeira para marcar threads para atenção especial. Os threads marcados são indicados por um ícone de bandeira vermelha na tabela da janela Threads. Para obter mais informações, confira Sinalizar e remover o sinalizador de threads.

Mostrar somente threads sinalizados

Você pode filtrar a janela Discussões para mostrar apenas discussões sinalizadas. Na barra de ferramentas da janela Threads, selecione Mostrar Somente Threads Sinalizados (ícone de sinalizador duplo). Você também pode usar o atalho de teclado Ctrl + 9. Essa ação só estará disponível quando houver threads sinalizados.

Congelar e descongelar threads

Quando você congela um thread, o sistema não inicia a execução do thread, mesmo que os recursos estejam disponíveis.

No código nativo, você pode suspender ou retomar threads chamando as funções do Windows SuspendThread e ResumeThread. Você também pode chamar as funções MFC CWinThread::SuspendThread e CWinThread::ResumeThread. Se você chamar a função SuspendThread ou ResumeThread, a contagem suspensa mostrada na janela Threads será alterada. A contagem suspensa não será alterada se você congelar ou descongelar um thread nativo. Um thread não pode ser executado em código nativo, a menos que o thread seja descongelado e tenha uma contagem suspensa de zero.

No código gerenciado, a contagem suspensa é alterada quando você congela ou descongela um thread. Se você congelar um thread no código gerenciado, sua contagem suspensa será 1. Quando você congela um thread no código nativo, sua contagem suspensa é 0, a menos que você use a chamada SuspendThread.

Nota

Quando você depura uma chamada de código nativo para código gerenciado, o código gerenciado é executado no mesmo thread físico que o código nativo de chamada. Suspender ou congelar o thread nativo também congela o código gerenciado.

Alterar a execução dos threads selecionados

Você pode congelar ou descongelar a execução de um ou mais threads. Na janela Threads, selecione os threads para os quais você deseja atualizar o estado de execução. Na barra de ferramentas da janela Threads, selecione Congelar Threads (ícone pausar reprodução) ou Descongelar Threads (ícone verde de reproduzir). A ação se aplica somente aos threads selecionados no momento. As ações de congelamento e descongelamento também estão disponíveis no menu de contexto do clique com o botão direito do mouse para cada thread.

Alterar o thread atual

Um ícone de seta amarela na tabela de janela Threads indica o thread atual (e o local do ponteiro de execução). O marcador de tópico atual original também permanece (indicado com um ícone de contorno de seta).

Alternar para outro thread

Há duas maneiras de alternar o thread atual no depurador. Clique duas vezes em qualquer thread na tabela da janela Threads para torná-lo o thread atual. Você também pode clicar com o botão direito do mouse em um thread e selecionar Alternar para Thread.

Aplicar agrupamento e classificação a tópicos

Você pode agrupar threads na tabela de janelas Threads usando os mesmos critérios que as colunas disponíveis. Todos os critérios estão sempre disponíveis para agrupamento, independentemente de a coluna correspondente estar visível no modo de exibição atual. Você pode selecionar apenas um agrupamento para a tabela.

Quando você agrupa threads, um título aparece na tabela para cada grupo. O título inclui uma descrição de grupo junto com o número de membros no grupo. Se você agrupar por Nome, poderá ver agrupamentos com títulos como Thread de Trabalho ou Threads não Sinalizados. Um ícone de seta de expansão/recolhimento aparece ao lado de cada título de grupo.

Depois de aplicar um critério de agrupamento, a exibição da tabela na janela Threads é atualizada para mostrar os threads membros para cada grupo sob o título deles. Use o ícone de seta de expansão/recolhimento de um grupo para mostrar ou ocultar os membros no modo de exibição atual.

Você também pode aplicar um único critério de classificação aos threads na tabela da janela Threads. O agrupamento tem precedência sobre a classificação. Por exemplo, você pode agrupar threads por Categoria e depois classificá-los pelo ID dentro de cada Categoria.

Agrupar threads na tabela

Na barra de ferramentas da janela Threads, expanda a lista suspensa Agrupar por e selecione os critérios para agrupar os threads. Você também pode remover o agrupamento aplicado selecionando Nenhum na lista suspensa Agrupar por.

Classificar threads na tabela

Você aplica a classificação aos threads na janela da tabela Threads selecionando os cabeçalhos das colunas na parte superior da tabela, como Nome ou ID.

Quando você seleciona um cabeçalho de coluna, a exibição da janela Threads é atualizada para mostrar os threads classificados pelos valores na coluna selecionada. A coluna selecionada também mostra um ícone de seta para cima/para baixo. O ícone de seta para cima indica a classificação pela coluna selecionada em ordem crescente. O ícone de seta para baixo indica a classificação pela coluna selecionada em ordem decrescente. Selecione o cabeçalho da coluna para alterar a ordem de classificação.

Classificar threads em grupos

Para ordenar threads dentro de grupos na janela Threads, primeiro use a lista suspensa Agrupar por para aplicar o critério de agrupamento. Em seguida, selecione o cabeçalho da coluna para classificar os threads agrupados pelos valores na coluna selecionada.

Expandir ou contrair todos os grupos

Há uma maneira rápida de mostrar ou ocultar todos os agrupamentos no modo de exibição atual. Na barra de ferramentas da janela Threads, selecione Expandir grupos (ícone de caixa dupla com símbolo de adição) ou Recolher grupos (ícone de caixa dupla com símbolo de menos).

Pesquisar tópicos

Você pode pesquisar os threads na tabela de janelas Threads e procurar conteúdo específico em qualquer uma das colunas de tabela visíveis. Quando você faz a pesquisa, o Visual Studio exibe as linhas de thread que têm dados de coluna que correspondem ao termo de pesquisa. A pesquisa também verifica a localização do thread que aparece na parte superior da pilha de chamadas na coluna Local.

Pesquisar conteúdo específico em threads

Há várias maneiras de pesquisar threads em busca de conteúdo específico. Na barra de ferramentas da janela Threads, insira a cadeia de caracteres a ser procurada na caixa Pesquisar e selecione Enter. Você pode especificar letras, números e caracteres especiais, como < na cadeia de caracteres de pesquisa. Quando a pesquisa for concluída, a janela Threads atualizará a tabela para mostrar threads com resultados correspondentes. O Visual Studio destaca as instâncias específicas que correspondem ao seu termo de pesquisa. Para retornar à visualização normal de threads, selecione o ícone de X ao lado da caixa Pesquisar.

Você também pode procurar uma cadeia de caracteres que você procurou anteriormente. Use a caixa suspensa Pesquisar e selecione uma cadeia de caracteres de pesquisa anterior.

Pesquisar a pilha de chamadas completa

Por padrão, a pilha de chamadas completa não é pesquisada. O Visual Studio busca correspondência somente nos threads visíveis na tabela da janela Threads.

Você pode incluir a pilha de chamadas completa selecionando Incluir pilhas de chamadas em pesquisas (ícone de item de lista) na barra de ferramentas da janela Threads. Quando a opção está habilitada, o ícone de item de lista tem uma borda.

Exibir pilhas de chamadas e alternar entre quadros

Em um programa de vários threads, cada thread tem a própria pilha de chamadas. A janela Threads fornece um modo conveniente de exibir essas pilhas.

Dica

Para uma representação visual da pilha de chamadas para cada thread, use a janela Pilhas Paralelas.

Exibir a pilha de chamadas para o thread

Na tabela da janela Threads, localize o thread para o qual você deseja examinar a pilha de chamadas completa. Na coluna Local, selecione a seta para expandir/recolher à esquerda da localização do thread. A localização se expande para mostrar a pilha de chamadas completa para o thread. Selecione a seta novamente para mostrar apenas o local.

Exibir ou recolher todas as pilhas de chamadas

Você pode controlar se a janela Threads sempre exibe as pilhas de chamadas completas de todos os threads na tabela. Na barra de ferramentas da janela Threads, selecione Expandir pilhas de chamadas (ícone de caixa com símbolo de adição) ou Recolher pilhas de chamadas (ícone de caixa com símbolo de menos).