Compartilhar via


Depurar threads e processos no Visual Studio

Threads e processos são conceitos relacionados à ciência da computação. Ambos representam sequências de instruções que devem executar em uma ordem específica. Instruções em threads ou processos separados, entretanto, podem ser executados em paralelo.

Os processos existem no sistema operacional e correspondem ao que os usuários veem como programas ou aplicativos. Um thread, por outro lado, existe dentro de um processo. Por esse motivo, os threads são às vezes chamados de processos leves. Cada processo consiste em um ou mais threads.

A existência de vários processos permite que um computador execute mais de uma tarefa de cada vez. A existência de vários threads permite que um processo separe o trabalho a ser executado paralelamente. Em um computador com multiprocessadores, os processos ou threads podem ser executados em processadores diferentes. Isso permite o verdadeiro processamento paralelo.

O processamento paralelo perfeito não é sempre possível. Às vezes os threads devem ser sincronizados. Um thread pode ter que aguardar um resultado de outro thread, ou um thread pode precisar de acesso exclusivo a um recurso que outro thread está usando. Problemas de sincronização são uma causa comum de erro em aplicativos com multithreads. Em alguns casos, os threads podem interromper espera de um recurso que nunca fica disponível. Isso resulta em uma condição chamada deadlock.

O depurador do Visual Studio fornece ferramentas avançadas e mas fáceis de usar para depurar threads e processos.

Ferramentas para depurar threads e processos no Visual Studio

As principais ferramentas para trabalhar com processos no Visual Studio são a caixa de diálogo Anexar ao Processo, a janela de Processos, e a barra de ferramentas Local de Depuração. As ferramentas principais para depurar threads são a janela de Threads, marcadores de thread em janelas de origem, e a barra de ferramentas de Local de Depuração.

As ferramentas principais para depurar aplicativos multissegmentados são Pilhas Paralelas e Tarefas Paralelas, Inspeção Paralela, e as janelas de Threads da GPU.

A tabela a seguir mostra as informações disponíveis e as ações que você pode executar em cada um desses locais:

Interface do Usuário

Informação disponível

Ações que você pode executar

Caixa de diálogo Anexar ao Processo

Processos disponíveis você pode anexar:

  • Nome do Processo (exe)

  • Número de identificação de processo

  • Título da barra de menus

  • Tipo (v4.0 gerenciado; V2.0 gerenciado, v1.1, v1.0; x86; x64; IA64)

  • Nome de usuário (nome de conta)

  • Número da sessão

Selecione um processo anexar.

Selecione um computador remoto

Altere o tipo de transporte para se conectar a computadores remotos

Janela Processos

Processos anexados:

  • Nome do Processo

  • Número de identificação de processo

  • Caminho para processar .exe

  • Título da barra de menus

  • Estado (interrupção. em execução)

  • Depurando (nativo, gerenciado etc.)

  • Tipo de transporte (padrão, nativo sem autenticação)

  • Qualificador de transporte (computador remoto)

Ferramentas:

  • Attach

  • Detach

  • Terminate

O menu de atalho:

  • Attach

  • Detach

  • Desanexe quando a depuração for interrompida

  • Terminate

Janela de Threads

Threads durante o processo atual:

  • Identificação do Thread

  • ID gerenciada

  • Categoria (thread principal, thread de interface, manipulador de chamada de procedimento remoto ou thread de trabalho)

  • Nome do Thread

  • Local onde o thread é criado

  • Prioridade

  • Máscara de Afinidade

  • Contagem suspensa

  • Nome do Processo

  • Indicador de Sinalização

  • Indexador suspenso

Ferramentas:

  • Pesquisar

  • Pesquisar pilha de chamadas

  • Sinalizar Apenas Meu Código

  • Sinalizar Seleção de Módulo Personalizada

  • Group by

  • Colunas

  • Expandir/Recolher pilhas de chamadas

  • Expandir/Recolher grupos

  • Congelar/descongelar threads

O menu de atalho:

  • Mostrar threads na origem

  • Alternar para um segmento

  • Congelar um thread em execução

  • Descongelar um thread congelado

  • Sinaliza um thread para estudos adicionais

  • Remover a sinalização de um segmento

  • Renomear um thread

  • Exibir e ocultar threads

Outras ações:

  • Exibir a pilha de chamadas para um segmento em um DataTip

Janela de origem

Indexadores de threads na medianiz esquerda indicam um ou vários segmentos (desativado por padrão, ativado usando o menu de atalho na janela Threads)

O menu de atalho:

  • Alternar para um segmento

  • Sinaliza um thread para estudos adicionais

  • Remover a sinalização de um segmento

Barra de ferramentas Local de Depuração

  • Processo atual

  • Mostrar a miniatura do aplicativo

  • Suspenda o aplicativo

  • Retomar o aplicativo

  • Suspenda e feche o aplicativo

  • Thread atual

  • Alterne o estado atual do sinalizador do segmento

  • Mostrar somente threads sinalizados

  • Mostrar o só o processo atual

  • Quadro de pilha atual

  • Alternar para outro processo

  • Suspenda, retome ou feche o aplicativo

  • Alterne para outro thread no processo atual

  • Alterne para outro quadro de pilha no thread atual

  • Sinalizar ou remover sinalização de threads atuais

  • Mostrar somente threads sinalizados

  • Mostrar somente o processo atual

Janela de Pilhas Paralelas

  • Pilhas de chamadas para vários threads em uma janela.

  • Quadro de pilha ativo para cada segmento.

  • Chamadores e receptores de qualquer método.

  • Remover threads especificados

  • Alterne para modo de exibição de Tarefas paralelas

  • Sinalizar ou remover sinalização de um thread

  • Aplicar zoom

Janela Tarefas Paralelas

  • Exibir informações sobre os objetos de Task, incluindo ID de tarefa, status de tarefa (agendada, executando, em espera, em deadlock), e qual segmento está atribuído à tarefa.

  • Local atual na pilha de chamadas.

  • O delegado passado para a tarefa no horário de criação

  • Alterne para a tarefa atual

  • Sinalizar ou remover sinalização de uma tarefa

  • Congelar ou descongelar uma tarefa

Janela Inspeção Paralela window

  • A coluna do sinalizador, na qual você pode marcar um thread ao qual deseja prestar atenção especial.

  • A coluna do quadro, na qual uma seta indica o quadro selecionado.

  • Uma coluna configurável que pode exibir o computador, o processo, o bloco, a tarefa e o thread.

  • Sinalizar ou remover sinalização de um thread

  • Exibir somente threads sinalizados

  • Quadros de opção

  • Classificar uma coluna

  • Agrupar threads

  • Congelar ou descongelar threads

  • exporte os dados na janela de Inspeção Paralela

Janela Threads da GPU

  • A coluna do sinalizador, na qual você pode marcar um thread ao qual deseja prestar atenção especial.

  • A coluna thread ativo, em que uma seta amarela indica um thread ativo. Uma seta indica um thread onde a execução interrompe no depurador.

  • A coluna Contagem de Threads, que exibe o número de segmentos no mesmo local.

  • A coluna de Linha, que exibe a linha de código onde cada grupo de segmentos está localizado.

  • A coluna de Endereço, que exibe o endereço da instrução onde cada grupo de threads está localizado.

  • A coluna Local, que é o local no código do endereço.

  • A coluna Status, que mostra se o segmento está ativo ou bloqueado.

  • A coluna Lado a lado, que mostra o índice lado a lado para os segmentos na linha.

  • Altere para um thread ativo diferente

  • Exibir um determinado ladrilho e o thread

  • Exibir ou ocultar uma coluna

  • Classificar por coluna

  • Agrupar threads

  • Congelar ou descongelar threads

  • Sinalizar ou remover sinalização de um thread

  • Exibir somente threads sinalizados

Consulte também

Outros recursos

Anexar aos processos em execução com o Depurador do Visual Studio

Depurar aplicativos multithread no Visual Studio

Depurando código de GPU