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.
Um thread é uma sequência de instruções à qual o sistema operacional concede tempo ao processador. Cada processo em execução no sistema operacional consiste em pelo menos um thread. Os processos que têm mais de um thread são chamados de multithreaded.
Computadores com vários processadores, processadores multi-core ou processos hyperthreading podem executar vários threads simultâneos. O processamento paralelo usando muitos threads pode melhorar muito o desempenho do programa, mas também pode tornar a depuração mais difícil porque você está rastreando muitos threads.
O processamento paralelo perfeito nem sempre é possível. Às vezes, os threads devem ser sincronizados. Um thread pode ter que esperar por 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 bugs em aplicativos multithreaded. Às vezes, os threads podem acabar esperando por um recurso que nunca fica disponível. Isso resulta em uma condição chamada deadlock.
Threads e processos
Tópicos e processos são conceitos relacionados em ciência da computação. Ambos representam sequências de instruções que devem ser executadas em uma ordem específica. Instruções em threads ou processos separados, no entanto, podem ser executadas em paralelo.
Os processos existem no sistema operacional e correspondem ao que os usuários veem como programas ou aplicativos. Um fio, por outro lado, existe dentro de um processo. Por esta razão, os fios são por vezes referidos como 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 ao mesmo tempo. A existência de vários threads permite que um processo separe o trabalho a ser executado em paralelo. Em um computador com multiprocessadores, processos ou threads podem ser executados em processadores diferentes. Isso permite um verdadeiro processamento paralelo.
Ferramentas para depuração de aplicativos multithreaded
O Visual Studio fornece diferentes ferramentas para uso na depuração de aplicativos multithreaded.
Para threads, as principais ferramentas para depuração de threads são a janela Parallel Stacks , a janela Parallel Watch , marcadores de thread nas janelas de origem, a janela Threads e a barra de ferramentas Debug Location . Para saber mais sobre o modo de exibição Threads em Pilhas Paralelas, consulte Depurar um deadlock usando o modo de exibição Threads. Para saber como usar as janelas Pilhas paralelas e Inspeção paralela , consulte Introdução à depuração de um aplicativo multithreaded. O artigo de introdução mostra como usar marcadores de thread. Além disso, consulte Passo a passo: Depurando um aplicativo AMP C++.
Para o código .NET que usa assíncrono, as principais ferramentas para depuração são o modo de exibição Tarefas na janela Pilhas paralelas . Para começar, consulte Depurar um aplicativo assíncrono (.NET).
Para depuração de threads na GPU, a ferramenta principal é a janela GPU Threads . Consulte Como: Usar a janela GPU Threads.
Para processos, as principais ferramentas são a caixa de diálogo Anexar ao Processo , a janela Processos e a barra de ferramentas Local de Depuração .
Visual Studio também fornece pontos de interrupção e pontos de rastreamento poderosos, que podem ser úteis quando você depurar aplicativos multithreaded. Use condições de ponto de interrupção e filtros para colocar pontos de interrupção em threads individuais. Tracepoints permitem que você rastreie a execução do seu programa sem quebrar, para estudar problemas como deadlocks. Para obter mais informações, consulte Ações de ponto de interrupção e pontos de rastreamento.
Depurar um aplicativo multithreaded que tem uma interface de usuário pode ser especialmente difícil. Você pode considerar executar o aplicativo em um segundo computador e usar a depuração remota. Para obter mais informações, consulte Depuração remota.
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 que pode anexar: - Nome do processo (.exe) - Número de identificação do processo - Título da barra de menus - Tipo (Gerenciado v4.0; Gerenciado v2.0, v1.1, v1.0; x86; x64; IA64) - Nome de usuário (nome da conta) - Número da sessão |
Selecione um processo para anexar Selecione um computador remoto Alterar o tipo de transporte para ligar a computadores remotos |
| Janela Processos | Processos anexos: - Nome do processo - Número de identificação do processo - Caminho para processar .exe - Título da barra de menus - Estado (Break. Em execução) - Depuração (Nativa, Gerenciada e assim por diante.) - Tipo de transporte (padrão, nativo sem autenticação) - Qualificador de Transporte (computador remoto) |
Ferramentas: - Anexar - Destacamento - Encerrar Menu de atalho: - Anexar - Destacamento - Desanexar quando a depuração parar - Encerrar |
| Barra de ferramentas Local de Depuração | - Processo atual - Suspender a aplicação - Retomar a candidatura - Suspender e desligar o aplicativo - Thread atual - Alternar o estado da bandeira de rosca atual - Mostrar apenas tópicos sinalizados - Mostrar apenas o processo atual - Quadro de pilha atual |
- Mude para outro processo - Suspender, retomar ou encerrar o aplicativo - Mudar para outro thread no processo atual - Mude para outro quadro de pilha no thread atual - Sinalizar ou dessinalizar threads atuais - Mostrar apenas tópicos sinalizados - Mostrar apenas o processo atual |
| Janela Parallel Stacks | - Pilhas de chamadas para vários threads em uma janela. - Quadro de pilha ativo para cada thread. - Chamadores e destinatários para qualquer método. - Deteção de Deadlock |
- Filtrar threads especificados - Filtrar pilhas de código externo - Mudar para a vista Tarefas - Sinalizar ou desmarcar um tópico - Zoom - Copiar quadros de pilha - Salvar / Exportar todas as pilhas como imagem |
| Janela de observação paralela | - A coluna da bandeira, na qual você pode marcar um fio que você deseja prestar atenção especial. - A coluna do quadro, na qual uma seta indica o quadro selecionado. - Uma coluna configurável que pode exibir a máquina, processo, bloco, tarefa e thread. |
- Sinalizar ou desmarcar um tópico - Exibir apenas threads sinalizados - Quadros de interruptor - Ordenar uma coluna - Tópicos de grupo - Congelar ou descongelar fios - exportar os dados na janela de observação paralela |
| Janela Threads | Tópicos no processo atual: - ID do thread - ID gerenciado - Categoria (thread principal, thread de interface, manipulador de chamada de procedimento remoto ou thread de trabalho) - Nome do tópico - Local onde o thread é criado - Prioridade - Máscara de Afinidade - Contagem suspensa - Nome do processo - Indicador de Bandeira - Indicador suspenso |
Ferramentas: - Pesquisa - Pilha de chamadas de pesquisa - Sinalizar Just My Code - Sinalizar Seleção de Módulo Personalizado - Grupo por - Colunas - Expandir/Recolher pilhas de chamadas - Expandir/Recolher grupos - Congelar/descongelar fios Menu de atalho: - Mostrar tópicos na fonte - Mudar para um thread - Congelar um fio em execução - Descongelar um fio congelado - Sinalizar um tópico para estudo adicional - Desmarcar um tópico - Renomear um thread - Mostrar e ocultar tópicos Outras ações: - Exibir a pilha de chamadas para um thread em uma DataTip |
| Janela de origem | Os indicadores de thread na calha esquerda indicam threads únicos ou múltiplos (desativados por padrão, ativados usando o menu de atalho na janela Threads ) | Menu de atalho: - Mudar para um thread - Sinalizar um tópico para estudo adicional - Desmarcar um tópico |
| Janela Tarefas | - Visualize informações sobre Task objetos, incluindo ID da tarefa, status da tarefa (agendada, em execução, esperando, bloqueada) e qual thread é atribuído à tarefa. - Localização atual na pilha de chamadas. - Delegado passado para a tarefa no momento da criação |
- Mudar para a tarefa atual - Sinalizar ou desmarcar uma tarefa - Congelar ou descongelar uma tarefa |
| Janela GPU Threads | - A coluna da bandeira, na qual você pode marcar um fio que você deseja prestar atenção especial. - A coluna de thread atual, na qual uma seta amarela indica o thread atual. - A coluna Thread Count , que exibe o número de threads no mesmo local. - A coluna Linha , que exibe a linha de código onde cada grupo de threads está localizado. - A coluna Endereço , que exibe o endereço de instrução onde cada grupo de threads está localizado. - A coluna Localização , que é a localização no código do endereço. - A coluna Status , que mostra se o thread está ativo ou bloqueado. - A coluna Mosaico , que mostra o índice de mosaico para os segmentos na linha. |
- Mudar para um segmento diferente - Exiba uma telha e um fio específicos - Exibir ou ocultar uma coluna - Ordenar por uma coluna - Tópicos de grupo - Congelar ou descongelar fios - Sinalizar ou desmarcar um tópico - Exibir apenas threads sinalizados |