Partilhar via


Depurando um processo de modo de usuário usando o WinDbg Classic

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

Anexando a um processo em execução

Há várias maneiras de usar o WinDbg para anexar a um processo em execução. Independentemente do método escolhido, você precisará do ID do processo ou do nome do processo. O ID do processo é um número atribuído pelo sistema operacional. Para obter mais informações sobre como determinar a ID do processo e o nome do processo, consulte Localizando a ID do processo.

WinDbg Menu

Quando o WinDbg está no modo inativo, você pode anexar a um processo em execução escolhendo Anexar a um Processo no menu Arquivo ou pressionando F6.

Na caixa de diálogo Anexar ao Processo, selecione o processo que deseja depurar e selecione OK.

Prompt de comando

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

  • windbg -p ID do processo
  • windbg -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 de linha de comando, consulte Opções de linha de comando do WinDbg.

Janela Comando do Depurador

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

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.

WinDbg Menu

Quando o WinDbg está no modo inativo, você pode depurar de forma não invasiva um processo em execução escolhendo Anexar a um Processo no menu Arquivo ou pressionando F6.

Quando a caixa de diálogo Anexar ao Processo for exibida, marque a caixa de seleção Não Invasivo . Em seguida, selecione a linha que contém a ID do processo e o nome desejados. (Você também pode inserir o ID do processo no Caixa de identificação do processo.) Por fim, selecione OK.

Prompt de comando

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

  • windbg -pv -p ProcessID
  • windbg -pv -pn Nome do processo

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

Janela Comando do Depurador

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

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

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 WinDbg 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.

WinDbg Menu

Quando o WinDbg está no modo inativo, você pode gerar um novo processo escolhendo Abrir Executável no menu Arquivo ou pressionando CTRL+E.

Quando a caixa de diálogo Abrir Executável for exibida, insira o caminho completo do arquivo executável na caixa Nome do arquivo ou use a lista Examinar para selecionar o caminho e o nome do arquivo desejados.

Se você quiser usar parâmetros de linha de comando com o aplicativo de modo de usuário, insira-os na caixa Argumentos . Se você quiser alterar o diretório inicial do diretório padrão, insira o caminho do diretório na caixa Diretório inicial . Se você quiser que o WinDbg seja anexado a processos filho, marque a caixa de seleção Depurar processos filho também .

Depois de fazer suas seleções, selecione Abrir.

Prompt de comando

Em uma janela do Prompt de Comando, você pode gerar um novo processo ao iniciar o WinDbg. Use o seguinte comando:

windbg [-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 de linha de comando, consulte Opções de linha de comando do WinDbg.

Janela Comando do Depurador

Se o WinDbg já estiver depurando um ou mais processos, você poderá criar um novo processo usando o comando .create (Criar Processo) na janela Comando do Depurador.

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.