Compartilhar via


Anexar após uma inicialização

Depois que um programa é iniciado, a sessão de depuração está pronta para anexar o DE (mecanismo de depuração) ao programa.

Decisões de design

Como a comunicação é mais fácil em um espaço de endereço compartilhado, você deve escolher entre duas abordagens de design: definir a comunicação entre a sessão de depuração e o DE. Ou defina a comunicação entre o DE e o programa. Escolha entre o seguinte:

  • Se fizer mais sentido configurar a comunicação entre a sessão de depuração e o DE, a sessão de depuração co-criará o DE e pedirá ao DE para anexar ao programa. Esse design deixa a sessão de depuração e o DE juntos em um espaço de endereço e o ambiente de tempo de execução e o programa juntos em outro.

  • Se fizer mais sentido configurar a comunicação entre o DE e o programa, o ambiente de execução cocriará o DE. Esse design mantém o SDM (Gerenciador de Sessão de Dados) em um espaço de endereço e o DE (Ambiente de Desenvolvimento), o ambiente de tempo de execução e o programa juntos em outro. Esse design é típico de um DE que é implementado com um interpretador para executar linguagens de script.

    Observação

    A maneira como o DE é anexado ao programa depende da implementação. A comunicação entre o DE e o programa também depende da implementação.

Implementation

Programaticamente, quando o SDM (gerenciador de depuração de sessão) recebe pela primeira vez o objeto IDebugProgram2 que representa o programa a ser iniciado, ele chama o método Attach , passando-lhe um objeto IDebugEventCallback2 , que mais tarde é usado para passar eventos de depuração de volta para o SDM. O método IDebugProgram2::Attach então chama o método OnAttach. Para obter mais informações sobre como o SDM recebe a IDebugProgram2 interface, consulte Notificando a porta.

Se o DE precisar ser executado no mesmo espaço de endereço que o programa que você está depurando: como o DE normalmente é parte de um interpretador que está executando um script, o método IDebugProgramNodeAttach2::OnAttach retorna S_FALSE. O S_FALSE retorno indica que ele concluiu o processo de anexar.

No entanto, se o DE for executado no espaço de endereço do SDM: o IDebugProgramNodeAttach2::OnAttach método retornará S_OK, ou a interface IDebugProgramNodeAttach2 não estiver implementada no objeto IDebugProgramNode2 associado ao programa que você está depurando. Nesse caso, o método Attach é eventualmente chamado para concluir a operação de anexação.

No último caso, você deve chamar o método GetProgramId no IDebugProgram2 objeto que foi passado para o IDebugEngine2::Attach método, armazená-lo GUID no objeto de programa local e retornar isso GUID quando o IDebugProgram2::GetProgramId método for chamado posteriormente neste objeto. O GUID é usado para identificar o programa de forma exclusiva para os vários componentes de depuração.

No caso do método IDebugProgramNodeAttach2::OnAttach retornar S_FALSE, o GUID de uso para o programa é passado para esse método e é o método IDebugProgramNodeAttach2::OnAttach que define o GUID no objeto de programa local.

O DE agora está anexado ao programa e pronto para enviar eventos de inicialização.