Compartilhar via


Anexar após uma inicialização

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

Decisões de design

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

  • Se fizer mais sentido configurar a comunicação entre a sessão de depuração e o DE, a sessão de depuração cocria o DE e pede que o DE se anexe 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 tempo de execução cocria o DE. Esse design deixa o SDM em um espaço de endereço e o DE, 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 forma como o DE se anexa ao programa depende da implementação. A comunicação entre a DE e o programa também depende da implementação.

Implementação

Programaticamente, quando o gerenciador de depuração de sessão (SDM) 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 é usado posteriormente para passar eventos de depuração de volta para o SDM. Em IDebugProgram2::Attach seguida, o método chama o método OnAttach . Para obter mais informações sobre como o SDM recebe a interface, consulte Notificando a IDebugProgram2 porta.

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

Se, no entanto, o DE for executado no espaço de endereço do SDM: o IDebugProgramNodeAttach2::OnAttach método retorna S_OK, ou a interface IDebugProgramNodeAttach2 não é 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 objeto que foi passado para o método, armazenar o GUID no IDebugProgram2 objeto de programa local e retorná-lo GUID quando o IDebugProgram2::GetProgramId IDebugEngine2::Attach método é subsequentemente chamado nesse objeto. O GUID é usado para identificar o programa exclusivamente nos vários componentes de depuração.

No caso do IDebugProgramNodeAttach2::OnAttach método que retorna , o a ser usado para o programa é passado para esse método e é o GUID IDebugProgramNodeAttach2::OnAttach método que S_FALSEdefine o GUID no objeto de programa local.

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