Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 conceção
Como a comunicação é mais fácil dentro de 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 o DE. Ou defina a comunicação entre o DE e o programa. Escolha entre as seguintes opções:
Se for mais lógico configurar a comunicação entre a sessão de depuração e o DE, a sessão de depuração co-cria o DE e solicita que o DE se conecte ao programa. Esse design mantém a sessão de depuração e o DE juntos num espaço de endereçamento e o ambiente de execução e o programa juntos em outro.
Se for mais lógico estabelecer a comunicação entre o DE e o programa, o ambiente de tempo de execução co-cria o DE. Este design deixa o SDM em um espaço de endereçamento e o DE, o ambiente de tempo de execução e o programa juntos em outro espaço de endereçamento. 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 liga 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 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 IDebugProgram2 interface, consulte Notificando a 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 retornará S_OK, ou a interface IDebugProgramNodeAttach2 não for implementada no objeto IDebugProgramNode2 associado ao programa que está a ser depurado. Nesse caso, o método Attach é eventualmente chamado para concluir a operação de anexação.
Neste último caso, deve-se chamar o método GetProgramId no objeto IDebugProgram2 que foi passado para o método IDebugEngine2::Attach, armazenar o resultado no objeto de programa local, e retornar este valor quando o método IDebugProgram2::GetProgramId for posteriormente chamado nesse objeto. O GUID é usado para identificar o programa de forma única entre os vários componentes de depuração.
No caso do IDebugProgramNodeAttach2::OnAttach método retornando S_FALSE, o GUID a usar para o programa é passado para esse método e é o IDebugProgramNodeAttach2::OnAttach método que define o GUID no objeto de programa local.
O DE agora está anexado ao programa e pronto para enviar quaisquer eventos de inicialização.