Partilhar via


Controlando um programa durante a depuração

Durante a depuração, controlar um programa consiste em definir pontos de interrupção no código gerenciado, passando pelo código gerenciado e e tratamento de exceções de primeira chance e a segunda chance. As seções a seguir descrevem como um depurador usa o common language runtime (CLR) API de depuração para executar essas tarefas.

Definindo um ponto de interrupção no código gerenciado

A lista a seguir fornece uma descrição passo a passo de como um ponto de interrupção é definido no código gerenciado:

Percorrendo o código gerenciado e

A lista a seguir fornece uma descrição passo a passo de como um único depurador-etapas por meio de código gerenciado.

  1. O depurador cria um seletor, dado o segmento em que a única etapa está a ocorrer. As chamadas do depurador do ICorDebugThread::CreateStepper método para o segmento que ele está sendo apresentado. Como alternativa, o depurador pode chamar o ICorDebugFrame::CreateStepper método para o quadro em relação ao qual a revisão está a ocorrer. Supõe-se que o processo é interrompido quando o escalonador é criado.

  2. O depurador etapas o thread chamando o ICorDebugStepper::Step método.

  3. O depurador continua a execução do processo, chamando o ICorDebugController::Continue método para o processo de depuração atual.

  4. A API de depuração informa o depurador que concluiu a etapa. As chamadas de API de depuração do ICorDebugManagedCallback::StepComplete método para o objeto que o depurador tinha registrado com o tempo de execução.

  5. O depurador etapas o thread novamente chamando o ICorDebugStepper::Step método.

  6. O depurador continua a execução do processo, chamando o ICorDebugController::Continue método para o processo de depuração atual.

A lista a seguir descreve as alternativas de revisão com código não gerenciado:

  • Opcionalmente, o depurador ignora a revisão no código nativo. As chamadas do depurador do ICorDebugStepper::StepOut método para ignorar o código nativo de revisão até que o quadro anterior seja reativado. As chamadas de API de depuração do ICorDebugManagedCallback::StepComplete método quando o código gerenciado é restabelecido.

  • O depurador opcionalmente as etapas na próxima seção do código gerenciado. As chamadas do depurador do ICorDebugStepper::Step método para que o controle é retornado para o depurador quando gerenciado anterior quadro do código é restabelecido ou quando o código não gerenciado chama novo código gerenciado.

  • O depurador continua a execução do processo, chamando o ICorDebugController::Continue método para o processo de depuração atual.

  • A API de depuração informa o depurador que ele está depurando o código não gerenciado chamando o ICorDebugUnmanagedCallback::DebugEvent método.

Manipulando Exceções

A lista a seguir fornece uma descrição passo a passo de como a chance de primeira e segunda chance de exceções são tratadas:

  1. O CLR informa o depurador que ocorreu uma exceção de primeira chance. As chamadas de API de depuração do ICorDebugManagedCallback::Exception método na ICorDebugManagedCallback interface que o depurador registrado com o tempo de execução.

  2. O depurador obtém informações sobre a exceção. As chamadas do depurador do ICorDebugThread::GetCurrentException método na ICorDebugThread foi passado o retorno de chamada para obter um objeto de exceção de objeto (ICorDebugValue).

  3. O depurador obtém o ICorDebugObjectValue o objeto de exceção. As chamadas do depurador do QueryInterface método para obter o ICorDebugObjectValue o objeto de exceção.

  4. O depurador obtém a classe do objeto de exceção foi acionada ao chamar o ICorDebugObjectValue::GetClass método.

  5. O depurador decide ignorar a exceção e continua.

  6. O CLR informa o depurador que ocorreu uma exceção de segunda chance. As chamadas de API de depuração do ICorDebugManagedCallback::Exception método e especifica que a exceção é uma exceção de segunda chance.

  7. O usuário decide que a exceção é irrelevante. As chamadas do depurador do ICorDebugThread::ClearCurrentException método para o segmento atual de depuração. Este método limpa a exceção e impede a exceção de que está sendo lançada.

  8. O depurador continua a execução do processo, chamando o ICorDebugController::Continue método para o processo de depuração atual.

Consulte também

Conceitos

Visão geral de depuração do CLR

Outros recursos

Depuração (referência de API não gerenciada)