Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A janela Threads no depurador do Visual Studio permite examinar e trabalhar com threads na aplicação que está a depurar. A janela fornece recursos para agrupar, classificar, sinalizar, congelar, descongelar e procurar threads em seu código e exibir pilhas de chamadas.
A janela Threads apenas está disponível enquanto o depurador do Visual Studio está em execução. Durante uma sessão de depuração, você pode abrir a janela selecionando Debug>Windows>Threads.
Este artigo descreve como trabalhar com o Threads janela para seus programas C#, Visual Basic ou C++. No entanto, a visualização Threads na janela Parallel Stacks geralmente é mais útil para depuração. Para obter mais informações, consulte Depurar um deadlock usando o modo de exibição Threads e Exibir threads e tarefas na janela Pilhas paralelas.
Explore a tabela da janela de Threads
A janela Threads apresenta uma tabela onde cada linha corresponde a um thread separado em seu aplicativo. Na visualizaçã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 o Threads tabela de janela 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 | Inadimplência | Descrição |
|---|---|---|
| Bandeira | Visível, sem rótulo | As 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 da bandeira) um tópico. O ícone de bandeira colorida ajuda a distinguir um segmento marcado de outros segmentos na tabela. Para obter mais informações, consulte Sinalizar e remover sinalização de tópicos. |
| Tópico atual | Visível, sem rótulo | O ícone de seta amarela nesta coluna indica o tópico 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 gerenciado | Visível | Exibe os números de identificação gerenciados para threads gerenciados. |
| Categoria | Visível | Indica a categoria de threads como sendo threads de interface do utilizador, 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 por seu nome, ou <Sem Nome> se o thread não tiver um nome especificado. Quando um thread não existe mais, o thread tem o rótulo [Thread Destroyed]. |
| Localização | Visível | Mostra onde o thread está sendo executado dentro da pilha de chamadas do aplicativo. Selecione a seta suspensa para ver a pilha de chamadas completa para o 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, consulte Congelar e descongelar fios. |
| 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 ao qual cada thread pertence. |
| Qualificador de Transporte | Escondido | Identifica exclusivamente a máquina à qual o depurador está conectado. |
Mostrar e ocultar colunas da tabela
Na barra de ferramentas da janela Threads, a lista suspensa Colunas apresenta as colunas disponíveis. Expanda a lista suspensa e selecione um nome de coluna para alternar sua visibilidade na tabela. As colunas visíveis são indicadas com uma marca de verificação na lista.
Sinalizar tópicos para atenção especial
Utilize o ícone de bandeira para marcar tópicos para atenção particular. Os segmentos marcados são indicados por um ícone de bandeira vermelha na tabela da janela Threads. Para obter mais informações, consulte Sinalizar e Dessinalizar threads.
Mostrar apenas threads sinalizados
Você pode filtrar a janela Threads para mostrar apenas threads sinalizados. Na barra de ferramentas da janela Threads, selecione Mostrar Somente Threads Marcados (ícone de sinalizador duplo). Você também pode usar o Ctrl + 9 atalho de teclado. Esta ação está disponível somente quando há threads sinalizados.
Congelar e descongelar fios
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 de suspensa mostrada na janela Threads alterações. A contagem suspensa não muda se você congelar ou descongelar um fio nativo. Um thread não pode ser executado em código nativo, a menos que o thread esteja descongelado e tenha uma contagem suspensa de zero.
No código gerenciado, a contagem suspensa muda 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 em código nativo, sua contagem suspensa é 0, a menos que você use a chamada SuspendThread.
Observação
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 de threads selecionados
Você pode congelar ou descongelar a execução de um ou mais dos threads (ou subprocessos). Na janela Threads, selecione os threads para os quais deseja atualizar o estado de execução. Na barra de ferramentas da janela Threads, selecione Freeze Threads (ícone de pausa) ou Thaw Threads (ícone de reprodução verde). 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 botão direito do mouse para cada thread.
Alterar o thread atual
Um ícone de seta amarela na tabela da janela Threads indica o thread atual (e o local do ponteiro de execução). O marcador de thread atual original também permanece (mostrado com um ícone de contorno de seta).
Alternar para outro thread
Há duas maneiras de alternar o thread atual no depurador. Dê um clique duplo em qualquer tópico na tabela da janela Threads para torná-lo o tópico 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 janela da tabela Threads usando os mesmos critérios das colunas disponíveis. Todos os critérios estão sempre disponíveis para agrupamento, independentemente de a coluna correspondente estar visível na vista 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 do grupo juntamente 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 para expandir/recolher aparece ao lado de cada título de grupo.
Depois de aplicar um critério de agrupamento, a exibição da tabela da janela Threads é atualizada para mostrar os threads pertencentes a cada grupo sob o respetivo título. Use o ícone de seta expandir/recolher 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 de janela Threads. O agrupamento tem precedência sobre a classificação. Por exemplo, você pode agrupar threads por Categoria e, em seguida, classificá-los por ID dentro de cada Categoria .
Agrupar tópicos 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 no menu suspenso Agrupar por.
Classificar threads na tabela
Você aplica a classificação das threads na janela Tópicos , tabela, selecionando os cabeçalhos de coluna na parte superior da tabela, como Nome ou ID.
Quando se seleciona um cabeçalho de coluna, a visualização da tabela na 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 tópicos de discussão dentro de grupos
Para classificar threads dentro de grupos na janela Threads, primeiro use a lista suspensa Group by para aplicar os critérios de agrupamento. Em seguida, selecione o cabeçalho da coluna para classificar os threads agrupados pelos valores na coluna selecionada.
Expandir ou recolher 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 mais) ou Fechar grupos (ícone de caixa dupla com símbolo de subtração).
Procurar tópicos
Você pode pesquisar os threads na tabela de janela Threads e procurar conteúdo específico em qualquer uma das colunas visíveis da tabela. Quando você faz a pesquisa, o Visual Studio exibe as linhas de thread que têm dados de coluna que correspondem à cadeia de caracteres de pesquisa. A pesquisa também analisa a localização do thread que aparece no topo da pilha de chamadas na coluna Location.
Pesquisar conteúdo específico em threads
Há várias maneiras de pesquisar tópicos para conteúdo específico. Na barra de ferramentas da janela Threads, insira o texto a procurar na caixa de Pesquisa e prima a tecla Enter. Você pode especificar letras, números e caracteres especiais, como < na cadeia de pesquisa. Quando a pesquisa é concluída, a janela Threads atualiza a tabela para mostrar threads com resultados correspondentes. O Visual Studio destaca as instâncias específicas que correspondem à sua cadeia de caracteres de pesquisa. Para retornar à vista normal de tópicos, selecione o ícone X ao lado da caixa de pesquisa .
Você também pode procurar por uma cadeia de caracteres que você procurou anteriormente. Use a caixa suspensa de pesquisa e selecione uma cadeia de caracteres de pesquisa anterior.
Pesquisar a pilha completa de chamadas
Por padrão, a pilha completa de chamadas não é pesquisada. O Visual Studio procura uma correspondência apenas nos threads visíveis na tabela de janela Threads.
Você pode incluir a pilha completa de chamadas selecionando Incluir pilhas de chamadas no de pesquisa (ícone de item de lista) na barra de ferramentas da janela Threads. Quando a opção está ativada, o ícone do item de lista tem uma borda.
Exibir pilhas de chamadas e alternar entre frames
Em um programa multithreaded, cada thread tem sua própria pilha de chamadas. A janela Threads fornece uma maneira conveniente de ver essas pilhas.
Dica
Para obter uma representação visual da pilha de chamadas para cada thread, use a janela Parallel Stacks.
Ver pilha de chamadas para o tópico
Na tabela de janela Threads, localize o thread para o qual você deseja examinar a pilha de chamadas completa. Na coluna Local , selecione a seta de expandir/recolher à esquerda do local do tópico. O local se expande para mostrar a pilha de chamadas completa para o thread. Selecione a seta novamente para mostrar apenas o local.
Ver ou recolher todas as pilhas de chamadas
Você pode controlar se a janela Threads sempre exibe as pilhas de chamadas completas para todos os threads na tabela. Na barra de ferramentas Threads janela, selecione Expandir pilhas de chamadas (ícone de caixa com símbolo de mais) ou Fechar pilhas de chamadas (ícone de caixa com símbolo de subtração).