Compartilhar via


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:

Definindo o processo atual e o thread

Para alterar o processo ou thread atual, você pode usar os seguintes métodos:

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 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:

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.