Compartilhar via


Anexar ao programa

Depois de registrar seus programas com a porta apropriada, você deve anexar o depurador ao programa que deseja depurar.

Escolher como anexar

Há três maneiras pelas quais o gerenciador de depuração de sessão (SDM) tenta anexar ao programa que está sendo depurado.

  1. Para programas que são iniciados pelo mecanismo de depuração por meio do método LaunchSuspended (típico de linguagens interpretadas, por exemplo), o SDM obtém a interface IDebugProgramNodeAttach2 do objeto IDebugProgramNode2 associado ao programa que está sendo anexado. Se o SDM puder obter a IDebugProgramNodeAttach2 interface, o SDM chamará o método OnAttach . O IDebugProgramNodeAttach2::OnAttach método retorna S_OK para indicar que ele não anexou ao programa e que outras tentativas podem ser feitas para anexar ao programa.

  2. Se o SDM puder obter a interface IDebugProgramEx2 do programa ao qual está sendo conectado, o SDM chamará o método Attach . Essa abordagem é típica de programas que foram lançados remotamente pelo fornecedor portuário.

  3. Se o programa não puder ser anexado por meio dos métodos ouIDebugProgramEx2::Attach, o SDM carregará o mecanismo de depuração (se ainda não tiver sido carregado) chamando a CoCreateInstance função e, em seguida, chamará o método Attach .IDebugProgramNodeAttach2::OnAttach Essa abordagem é típica de programas lançados localmente por um fornecedor portuário.

    Também é possível para um fornecedor de porto personalizado chamar o IDebugEngine2::Attach método na implementação do método pelo fornecedor de IDebugProgramEx2::Attach porto personalizado. Normalmente, nesse caso, o fornecedor de porta personalizada inicia o mecanismo de depuração na máquina remota.

    O anexo é obtido quando o gerenciador de depuração de sessão (SDM) chama o método Attach .

    Se você executar seu DE no mesmo processo que o aplicativo a ser depurado, deverá implementar os seguintes métodos de IDebugProgramNode2:

  1. Envie um objeto de evento IDebugEngineCreateEvent2 para o SDM. Para obter mais informações, consulte Enviando eventos.

  2. Chame o método GetProgramId no objeto IDebugProgram2 que foi passado para o IDebugEngine2::Attach método.

    Isso retorna um GUID que é usado para identificar o programa. O GUID deve ser armazenado no objeto que representa o programa local para o DE, e deve ser retornado quando o IDebugProgram2::GetProgramId método é chamado na IDebugProgram2 interface.

    Observação

    Se você implementar a IDebugProgramNodeAttach2 interface, o programa é GUID passado para o IDebugProgramNodeAttach2::OnAttach método. Isso GUID é usado para o programa retornado GUID pelo IDebugProgram2::GetProgramId método.

  3. Envie um objeto de evento IDebugProgramCreateEvent2 para notificar o SDM de que o objeto local IDebugProgram2 foi criado para representar o programa para o DE. Para obter detalhes, consulte Enviando eventos.

    Observação

    Este não é o mesmo IDebugProgram2 objeto que foi passado para o IDebugEngine2::Attach método. O objeto passado IDebugProgram2 anteriormente é reconhecido apenas pela porta e é um objeto separado.