Compartilhar via


Controle de execução

O mecanismo de depuração (DE) normalmente envia um dos seguintes eventos como o último evento de inicialização:

  • O evento do ponto de entrada, se anexado a um programa recém-lançado

  • O evento load complete, se estiver anexado a um programa que já esteja em execução

    Ambos os eventos são eventos de parada, o que significa que o DE aguarda uma resposta do usuário por meio do IDE. Para obter mais informações, consulte Modos operacionais.

Evento de parada

Quando um evento de parada é enviado para a sessão de depuração:

  1. O programa e o thread que contêm o ponteiro de instrução atual podem ser obtidos na interface do evento.

  2. O IDE determina o arquivo e a posição do código-fonte atual, que ele exibe conforme destacado no editor.

  3. A sessão de depuração normalmente responde a esse primeiro evento de parada chamando o método Continue do programa.

  4. Em seguida, o programa é executado até encontrar uma condição de parada, como atingir um ponto de interrupção. Nesse caso, o DE envia um evento de ponto de interrupção para a sessão de depuração. O evento de ponto de interrupção é um evento de parada e o DE aguarda novamente uma resposta do usuário.

  5. Se o usuário optar por entrar, terminar ou sair de uma função, o IDE solicitará que a sessão de depuração chame o método do Step programa. Em seguida, o IDE passa a unidade de etapa (instrução, instrução ou linha) e o tipo de etapa (se deve entrar, ultrapassar ou sair da função). Quando a etapa é concluída, o DE envia um evento step complete para a sessão de depuração, que é um evento de parada.

    -ou-

    Se o usuário optar por continuar a execução a partir do ponteiro de instrução atual, o IDE solicitará que a sessão de depuração chame o método Execute do programa. O programa retoma a execução até encontrar a próxima condição de parada.

    -ou-

    Se a sessão de depuração for ignorar um evento de parada específico, a sessão de depuração chamará o método Continue do programa. Se o programa estava entrando, terminando ou saindo de uma função quando encontrou a condição de parada, ele continua a etapa.

    Programaticamente, quando o DE encontra uma condição de parada, ele envia eventos de parada como IDebugLoadCompleteEvent2 ou IDebugEntryPointEvent2 para o gerenciador de depuração de sessão (SDM) por meio de uma interface IDebugEventCallback2. O DE passa as interfaces IDebugProgram2 e IDebugThread2 que representam o programa e o thread que contém o ponteiro de instrução atual. O SDM chama IDebugThread2::EnumFrameInfo para obter o quadro de pilha superior e chama IDebugStackFrame2::GetDocumentContext para obter o contexto do documento associado ao ponteiro de instrução atual. Esse contexto de documento geralmente é um nome de arquivo de código-fonte, um número de linha e de coluna. O IDE os usa para realçar o código-fonte que contém o ponteiro de instrução atual.

    O SDM normalmente responde a esse primeiro evento de parada chamando IDebugProgram2::Continue. Em seguida, o programa é executado até encontrar uma condição de parada, como atingir um ponto de interrupção, caso em que o DE envia uma interface IDebugBreakpointEvent2 para o SDM. O evento de ponto de interrupção é um evento de parada e o DE aguarda novamente uma resposta do usuário.

    Se o usuário optar por entrar, terminar ou sair de uma função, o IDE solicitará que o SDM chame IDebugProgram2::Step. O IDE então passa o STEPUNIT (instrução, instrução ou linha) e o STEPKIND, ou seja, se deve entrar, ultrapassar ou sair da função. Quando a etapa é concluída, o DE envia uma interface IDebugStepCompleteEvent2 para o SDM, que é um evento de parada.

    Se o usuário optar por continuar executando a partir do ponteiro de instrução atual, o IDE solicitará que o SDM chame IDebugProgram2::Execute. O programa retoma a execução até encontrar a próxima condição de parada.

    Se o pacote de depuração for ignorar um evento de parada específico, o pacote de depuração chamará o SDM, que chama IDebugProgram2::Continue. Se o programa estava entrando, terminando ou saindo de uma função quando encontrou a condição de parada, ele continua a etapa. Isso implica que o programa mantém um estado de stepping, para que ele saiba como continuar.

    As chamadas que o SDM faz para Step, Executar e Continuar são assíncronas, o que significa que o SDM espera que a chamada retorne rapidamente. Se o DE enviar ao SDM um evento de parada no mesmo thread antes Stepde , Executar ou Continuar retornar, o SDM pára de responder.