Compartilhar via


Depurando um processo de modo de usuário usando CDB

Você pode usar o CDB para anexar a um processo em execução ou para gerar e anexar a um novo processo.

Anexando a um processo em execução

Prompt de comando

Em uma janela do Prompt de Comando, você pode anexar a um processo em execução ao iniciar o CDB. Use um dos seguintes comandos:

  • cdb -p ProcessID
  • cdb -pn Nome_do_Processo

em que ProcessID é a ID do processo de um processo em execução ou ProcessName é o nome de um processo em execução.

Para obter mais informações sobre a sintaxe da linha de comando, consulte Opções de linha de comando do CDB.

Janela de comando CDB

Se o depurador já estiver depurando um ou mais processos, você poderá anexar a um processo em execução usando o comando .attach (Anexar ao Processo ).

O depurador sempre inicia vários processos de destino simultaneamente, a menos que alguns de seus threads estejam congelados ou suspensos.

Se o comando .attach for bem-sucedido, o depurador será anexado ao processo especificado na próxima vez que o depurador emitir um comando de execução. Se você usar esse comando várias vezes seguidas, a execução deverá ser solicitada pelo depurador quantas vezes você usar esse comando.

Anexando a um processo em execução de forma não invasiva

Se você quiser depurar um processo em execução e interferir apenas minimamente em sua execução, deverá depurar o processo de forma não invasiva.

Prompt de comando

Para depurar de forma não invasiva um processo em execução na linha de comando do CDB, especifique a opção -pv , a opção -p e a ID do processo na sintaxe a seguir.

cdb -pv -p ProcessID

Ou, para depurar de forma não invasiva um processo em execução especificando o nome do processo, use a sintaxe a seguir.

cdb -pv -pn Nome_do_processo

Existem várias outras opções úteis de linha de comando. Para obter mais informações sobre a sintaxe da linha de comando, consulte Opções de linha de comando do CDB.

Janela de comando CDB

Se o depurador já estiver ativo, você poderá depurar de forma não invasiva um processo em execução inserindo o comando .attach -v (Anexar ao Processo).

Você pode usar o comando .attach se o depurador já estiver depurando um ou mais processos de forma invasiva.

Se o comando .attach -v for bem-sucedido, o depurador depurará o processo especificado na próxima vez que o depurador emitir um comando de execução. Como a execução não é permitida durante a depuração não invasiva, o depurador não pode depurar de forma não invasiva mais de um processo por vez. Essa restrição também significa que o uso do comando .attach -v pode tornar uma sessão de depuração invasiva existente menos útil.

Gerando um novo processo

O CDB pode iniciar um aplicativo no modo de usuário e, em seguida, depurar o aplicativo. O aplicativo é especificado por nome. O depurador também pode anexar automaticamente a processos filho (processos adicionais que o processo de destino original iniciou).

Os processos que o depurador cria (também conhecidos como processos gerados) se comportam de maneira ligeiramente diferente dos processos que o depurador não cria.

Em vez de usar a API de heap padrão, os processos que o depurador cria usam um heap de depuração especial. Você pode forçar um processo gerado a usar o heap padrão em vez do heap de depuração usando a variável de ambiente _NO_DEBUG_HEAP ou a opção de linha de comando -hd.

Além disso, como o aplicativo de destino é um processo filho do depurador, ele herda as permissões do depurador. Essa permissão pode permitir que o aplicativo de destino execute determinadas ações que não poderia executar de outra forma. Por exemplo, o aplicativo de destino pode afetar processos protegidos.

Em uma janela do Prompt de Comando, você pode gerar um novo processo ao iniciar o CDB. Insira o comando a seguir.

cdb [-o] ProgramName [Argumentos]

A opção -o faz com que o depurador seja anexado a processos filho. Existem várias outras opções úteis de linha de comando. Para obter mais informações sobre a sintaxe da linha de comando, consulte Opções de linha de comando do CDB.

Se o depurador já estiver depurando um ou mais processos, você poderá criar um novo processo inserindo o comando .create (Criar Processo ).

O depurador sempre iniciará vários processos de destino simultaneamente, a menos que alguns de seus threads estejam congelados ou suspensos.

Se o comando .create for bem-sucedido, o depurador criará o processo especificado na próxima vez que o depurador emitir um comando de execução. Se você usar esse comando várias vezes seguidas, a execução deverá ser solicitada pelo depurador quantas vezes você usar esse comando.

Você pode controlar o diretório inicial do aplicativo usando o comando .createdir (Set Created Process Directory) antes de .create. Você pode usar o comando .createdir -I ou a opção de linha de comando -noinh para controlar se o aplicativo de destino herda os identificadores do depurador.

Você pode ativar ou desativar a depuração de processos filho usando o comando .childdbg (Depurar Processos Filho).

Reanexando a um processo

Se o depurador parar de responder ou congelar, você poderá anexar um novo depurador ao processo de destino. Para obter mais informações sobre como anexar um depurador nessa situação, consulte Reanexando ao aplicativo de destino.