Depurar vários processos (C#, Visual Basic, C++)

O Visual Studio pode depurar uma solução que tem vários processos. Você pode iniciar e alternar entre processos, interromper, continuar, percorrer a origem, interromper a depuração e terminar ou desanexar de processos individuais.

Iniciar a depuração com vários processos

Quando mais de um projeto em uma solução do Visual Studio pode ser executado de forma independente, você pode selecionar qual projeto o depurador inicia. O projeto de inicialização atual aparece em negrito no Gerenciador de Soluções.

Para alterar o projeto de inicialização, no Gerenciador de Soluções, clique com o botão direito do mouse em um projeto diferente e selecione Definir como Projeto de Inicialização.

Para começar a depurar um projeto do Gerenciador de Soluções sem torná-lo o projeto de inicialização, clique com o botão direito do mouse no projeto e selecione Depurar>Iniciar nova instância ou Intervir em uma nova instância.

Para definir o projeto de inicialização ou vários projetos do painel Propriedades da solução:

  1. Selecione a solução no Gerenciador de Soluções e selecione o ícone Propriedades na barra de ferramentas ou clique com o botão direito do mouse na solução e selecione Propriedades.

  2. Na página Propriedades, selecionePropriedades Comuns>Projeto de Inicialização.

    Changing the startup type for a project

  3. Selecione Seleção atual, Projeto de inicialização único e um arquivo de projeto ou Vários projetos de inicialização.

    Se você selecionar Vários projetos de inicialização, será possível alterar a ordem de inicialização e a ação a serem tomadas para cada projeto: Iniciar, Iniciar sem depuração ou Nenhum.

  4. Selecione Aplicar ou OK para aplicar e fechar a caixa de diálogo.

Anexar a um processo

O depurador também pode anexar a aplicativos em execução em processos fora do Visual Studio, inclusive em dispositivos remotos. Depois de anexar a um aplicativo, você pode usar o depurador do Visual Studio. Os recursos de depuração podem ser limitados. Depende se o aplicativo foi criado com informações de depuração, se você tem acesso ao código-fonte do aplicativo e se o compilador JIT está rastreando informações de depuração.

Para obter mais informações, consulte Anexar a processos em execução.

Para anexar a um processo em execução:

  1. Com o aplicativo em execução, selecione Depurar>Anexar ao Processo.

    Attach to Process dialog box

  2. Na caixa de diálogo Anexar ao Processo, selecione o processo da lista de Processos Disponíveis e, em seguida, selecione Anexar.

Observação

O depurador não é anexado automaticamente a um processo filho que é inicializado por um processo depurado, mesmo se o projeto filho estiver na mesma solução. Para depurar um processo filho, anexe ao processo filho após o início ou configure o Editor do Registro do Windows para iniciar o processo filho em uma nova instância do depurador.

Usar o Editor do Registro para iniciar automaticamente um processo no depurador

Às vezes, pode ser necessário depurar o código de inicialização para um aplicativo que foi iniciado por outro processo. Os exemplos incluem serviços e ações de configuração personalizada. Você pode fazer com que o depurador seja iniciado e anexado automaticamente ao aplicativo.

  1. Inicie o Editor do Registro do Windows executando regedit.exe.

  2. No Editor do Registro, vá para HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options.

  3. Selecione a pasta do aplicativo que você deseja iniciar o depurador.

    Se o aplicativo não estiver listado como uma pasta filho, clique com o botão direito do mouse em Opções de Execução de Arquivo de Imagem, selecione Nova>Chave e digite o nome do aplicativo. Ou clique com o botão direito do mouse na nova chave na árvore, selecione Renomear e, em seguida, insira o nome do aplicativo.

  4. Clique com o botão direito do mouse na nova chave na árvore e selecione Novo>Valor da Cadeia de Caracteres.

  5. Altere o nome do novo valor de Novo valor nº 1 para debugger.

  6. Clique com o botão direito do mouse em depurador e selecione Modificar.

    Edit String dialog box

  7. Na caixa de diálogo Editar Cadeia de Caracteres, digite vsjitdebugger.exe na caixa Dados do valor e selecione OK.

    Automatic debugger start entry in regedit.exe

Depurar com vários processos

Ao depurar um aplicativo com vários processos, os comandos de interrupção, execução em etapas e continuação do depurador afetam todos os processos por padrão. Por exemplo, quando um processo é suspenso em um ponto de interrupção, a execução de todos outros processos é suspendida também. Você pode alterar esse comportamento padrão para obter mais controle sobre os destinos dos comandos de execução.

Para alterar se todos os processos são suspensos quando um processo é interrompido:

  • Em Ferramentas (ou Depurar) >Opções>Depuração>Geral, selecione ou desmarque a caixa de seleção Interromper todos os processos quando um processo for interrompido.

Interromper, depurar e continuar comandos

A tabela a seguir descreve os comportamentos dos comandos de depuração quando a caixa de seleção Interromper todos os processos quando um processo for interrompido é selecionada ou desmarcada:

Comando Selecionado Desmarcado
Depurar>Interromper todos Todos os processos são interrompidos. Todos os processos são interrompidos.
Depurar>Continuar Todos os processos são retomados. Todos os processos suspensos são retomados.
Depurar>Intervir, Contornar ou Sair Todos os processos estão em execução durante as etapas de processo atual.
Em seguida, todos os processos são interrompidos.
Etapas de processo atual.
Retomada de processos suspensos.
Executando a continuação dos processos.
Depurar>Intervir no Processo Atual, Contornar o Processo Atual ou Sair do Processo Atual N/D Etapas de processo atual.
Outros processos mantém o estado existente (suspenso ou em execução).
Janela de origem Ponto de interrupção Todos os processos são interrompidos. Somente quebras do processo da janela de origem.
Janela de origem Executar no cursor
A janela de origem deve estar no processo atual.
Todos os processos estão em execução enquanto o processo da janela de origem executa ao cursor e depois interrompe.
Em seguida, todos os outros processos não interrompidos.
O processo da janela de origem é executado para o cursor.
Outros processos mantém o estado existente (suspenso ou em execução).
Janela Processos>Interromper processo N/D Quebras selecionadas do processo.
Outros processos mantém o estado existente (suspenso ou em execução).
Janela Processos>Continuar processo N/D O processo selecionado é retomado.
Outros processos mantém o estado existente (suspenso ou em execução).

Localize a fonte e os arquivos de símbolo (.pdb)

Para navegar no código-fonte de um processo, o depurador precisa acessar os arquivos de origem e os arquivos do símbolo. Para obter mais informações, confira Especificar arquivos de símbolo (.pdb) e de origem.

Se você não conseguir acessar arquivos para um processo, poderá navegar usando a janela de Desmontagem. Para obter mais informações, consulte Como usar a janela de desmontagem.

Alternar entre processos

Você pode conectar-se a vários processos quando está depurando, mas somente um processo está ativo no depurador em um determinado momento. Você pode definir o processo ativo atual ou na barra de ferramentas do Localização de Depuração ou na janela Processos. Para alternar entre processos, ambos os processos devem estar no modo de interrupção.

Para definir o processo atual na barra de ferramentas Local de Depuração:

  1. Para abrir a barra de ferramentas Local de Depuração, selecione Exibir>Barras de ferramentas>Local de Depuração.

  2. Durante a depuração, na barra de ferramentas Local de Depuração, selecione o processo que você deseja definir como o processo atual na lista suspensa Processo.

    Switch between processes

Para definir o processo atual na janela Processos:

  1. Para abrir a janela Processos durante a depuração, selecione Depurar>Windows>Processos.

  2. Na janela Processos, o processo atual é marcado por uma seta amarela. Clique duas vezes no processo que você deseja definir como o processo atual.

    Processes window

Alternar para um processo o torna o processo atual para fins de depuração. A janela do depurador exibe o estado do processo atual e os comandos das etapas afetaram somente o processo atual.

Parar a depuração com vários processos

Por padrão, quando você seleciona Depurar>Parar a depuração, o depurador termina ou desanexa de todos os processos.

  • Se o processo atual foi iniciado no depurador, o processo é finalizado.

  • Se você já anexou o depurador ao processo atual, o depurador será desanexado do processo e o deixará em execução.

Se você começar a depurar um processo de uma solução do Visual Studio, anexe a outro processo que já esteja em execução e escolha Parar a depuração. A sessão de depuração terminará. O processo iniciado no Visual Studio termina, enquanto o processo ao qual você anexou continua em execução.

Para controlar a maneira como Parar a depuração afeta um processo individual, na janela Processos, clique com o botão direito do mouse em um processo e marque ou desmarque a caixa de seleção Desanexar quando a depuração parou.

Observação

A opção do depurador Interromper todos os processos quando um processo for interrompido não afeta a interrupção, o encerramento ou a desanexação dos processos.

Parar, finalizar e desanexar comandos

A tabela a seguir descreve os comportamentos dos comandos stop, terminate e detach do depurador com vários processos:

Comando Descrição
Depurar>Parar a depuração A menos que o comportamento seja alterado na janela Processos, os processos iniciados pelo depurador serão encerrados e os processos anexados serão desanexados.
Depurar>Encerrar todos Todos os processos são encerrados.
Depurar>Desanexar tudo O depurador desanexa todos os processos.
Janela Processos>Desanexar processo O depurador dispara do processo selecionado.
Outros processos mantém o estado existente (suspenso ou em execução).
Janela Processos>Encerrar o processo O processo selecionado é encerrado.
Outros processos mantém o estado existente (suspenso ou em execução).
Janela Processos>Desanexar quando a depuração parar Se selecionado, Depurar>Parar depuração desanexa do processo selecionado.
Se não estiver selecionado, Depurar>Parar depuração encerrará o processo selecionado.