Controlando processos e threads
Ao executar a depuração do modo de usuário, você ativa, exibe, congela, descongela, suspende e não gasta 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 de 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 invadiu o depurador. Da mesma forma, o thread atual é aquele que estava ativo quando o depurador foi anexado ao processo ou que causou a exceção. No entanto, você pode usar o depurador para alterar o processo e o thread atuais e congelar ou descongelar threads individuais.
Na depuração no modo kernel, os processos e os 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 | (Status do Processo) Comando
O comando ~ (Status do Thread)
(Somente 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 (Definir Thread Atual)
(Somente WinDbg) A janela Processos e Threads
Congelando e suspendendo threads
O depurador pode alterar a execução de um thread suspendendo o thread ou congelando o thread. Essas duas ações têm efeitos um pouco 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 executará o thread quando apropriado.
Normalmente, cada thread tem uma contagem de suspensão de zero. Quando o depurador é anexado a um processo, ele incrementa as contagens de suspensão de todos os threads nesse processo por um. Se o depurador se desanexar do processo, ele diminuirá todas as contagens de suspensão por um. 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 do depurador usando os seguintes métodos:
O comando ~n (Suspender Thread) incrementa a contagem de suspensão do thread especificado por um.
O comando ~m (Retomar Thread) diminui a contagem de suspensão do thread especificado por 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 é executado ou desanexado do processo, o thread tem uma contagem de suspensão de um e permanece suspenso, mesmo que outros threads no processo estejam sendo executados.
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, "frozen" é apenas uma configuração de depurador. Nada no sistema operacional Windows reconhece que algo é diferente nesse thread.
Por padrão, todos os threads são descongelado. Quando o depurador faz com que um processo seja executado, os threads congelados não são executados. No entanto, se o depurador desanexar do processo, todos os threads descongelarão.
Para congelar e descongelar threads individuais, você pode usar os seguintes métodos:
O comando ~f (Congelar Thread) congela o thread especificado.
O comando ~u (Descongelar Thread) descongela o thread especificado.
De qualquer forma, os threads que pertencem ao processo de destino nunca são executados quando o depurador é dividido no destino. A contagem de suspensão de um thread afeta o comportamento do thread somente quando o depurador executa o processo ou desanexa. 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 (Comando Específico do Thread) 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
Vários sistemas
O depurador pode anexar a vários destinos 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 esse tipo de depuração, consulte Depurando vários destinos.