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_FALSE
define o GUID
no objeto de programa local.
O DE agora está anexado ao programa e pronto para enviar quaisquer eventos de inicialização.