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.
Ao executar a depuração no modo de usuário, você ativa, exibe, congela, descongela, suspende e dessuspende processos e threads.
O processo atual ou ativo é o processo que está sendo depurado no momento. Da mesma forma, o thread atual ou ativo é o thread que o depurador está controlando no momento. As ações de muitos comandos do depurador são determinadas pela identidade do processo atual e do thread. O processo atual também determina os mapeamentos de endereço virtual que o depurador usa.
Quando a depuração começa, o processo atual é aquele ao qual o depurador está anexado ou que causou a exceção que ativou o depurador. Da mesma forma, o fluxo de execução atual é aquele que estava ativo quando o depurador se anexou ao processo ou que causou a exceção. No entanto, pode usar o depurador para alterar o processo e o encadeamento atuais e para congelar ou descongelar encadeamentos individuais.
Na depuração do modo kernel, os processos e threads não são controlados pelos métodos descritos nesta seção. Para obter mais informações sobre como processos e threads são manipulados no modo kernel, consulte Alterando contextos.
Exibindo processos e threads
Para exibir informações de processo e thread, você pode usar os seguintes métodos:
O | (Estado do Processo) comando
O comando ~ (Status do Thread)
(Apenas WinDBG) A janela Processos e Threads
Definindo o processo atual e o thread
Para alterar o processo ou thread atual, você pode usar os seguintes métodos:
O comando |s (Definir processo atual)
O comando ~s (set Current Thread)
(Apenas WinDBG) A janela Processos e Threads
Congelamento e suspensão de fios
O depurador pode alterar a execução de um thread suspendendo o thread ou congelando o thread. Estas duas ações têm efeitos algo diferentes.
Cada thread tem uma contagem de suspensão associada a ele. Se essa contagem for uma ou maior, o sistema não executará o thread. Se a contagem for zero ou inferior, o sistema executa o thread quando apropriado.
Normalmente, cada thread tem uma contagem de suspensão igual a zero. Quando o depurador se anexa a um processo, ele incrementa as contagens de suspensão de todos os threads nesse processo em um. Se o depurador se desligar do processo, ele diminui em um todas as contagens de suspensão. Quando o depurador executa o processo, ele diminui temporariamente todas as contagens de suspensão por um.
Você pode controlar a contagem de suspensão de qualquer thread a partir do depurador usando os seguintes métodos:
O comando ~n (Suspend Thread) incrementa a contagem de suspensão do thread especificado em um.
O comando ~m (Resume Thread) diminui a contagem de suspensão do thread especificado em um.
O uso mais comum para esses comandos é aumentar a contagem de suspensão de um thread específico de um para dois. Quando o depurador executa ou se desanexa do processo, o thread tem uma contagem de suspensão de um e permanece suspenso, mesmo que outros threads no processo estejam em execução.
Você pode suspender threads mesmo quando estiver executando depuração não invasiva.
O depurador também pode congelar um thread. Essa ação é semelhante à suspensão do thread de algumas maneiras. No entanto, "congelado" é apenas uma configuração do depurador. Nada no sistema operacional Windows reconhece que algo é diferente sobre este tópico.
Por padrão, todos os threads são descongelados. Quando o depurador faz com que um processo seja executado, os threads que estão congelados não são executados. No entanto, se o depurador se desanexar do processo, todos os threads de execução serão descongelados.
Para congelar e descongelar threads individuais, você pode usar os seguintes métodos:
O comando ~f (Freeze Thread) congela o thread especificado.
O comando ~u (Unfreeze Thread) descongela o thread especificado.
Em qualquer caso, os threads que pertencem ao processo de destino nunca são executados quando o depurador interrompe o processo de destino. A contagem de suspensão de um thread afeta o comportamento do thread somente quando o depurador executa o processo ou se desliga. O status congelado afeta o comportamento do thread somente quando o depurador executa o processo.
Threads e processos em outros comandos
Você pode adicionar especificadores de thread ou especificadores de processo antes de muitos outros comandos. Para obter mais informações, consulte os tópicos de comando individuais.
Você pode adicionar o qualificador ~e (Thread-Specific Command) antes de muitos comandos e comandos de extensão. Esse qualificador faz com que o comando seja executado em relação ao thread especificado. Esse qualificador é especialmente útil se você quiser aplicar um comando a mais de um thread. Por exemplo, o comando a seguir repete o comando de extensão !gle para cada thread que está sendo depurado.
~*e !gle
Múltiplos Sistemas
O depurador pode ligar-se a vários alvos ao mesmo tempo. Quando esses processos incluem arquivos de despejo ou incluem destinos dinâmicos em mais de um computador, o depurador faz referência a um sistema, processo e thread para cada ação. Para obter mais informações sobre este tipo de depuração, consulte Depuração de Vários Alvos.