Partilhar via


Controlar um programa durante a depuração

Durante a depuração, controle de um programa consiste configuração pontos de interrupção no código gerenciado, etapas através do código gerenciado e e tratamento de exceções de primeira chance e segunda chance. As seções a seguir descrevem como um depurador usa o common linguagem tempo de execução (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:

Revisão através do 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 thread no qual etapa única é ocorrer. O depurador chama a ICorDebugthread::CreateStepper método para o thread ele que seja 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 seletor é 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 corrente.

  4. A API de depuração informa o depurador se a etapa foi concluída. A API de depuração chama o ICorDebugManagedCallback::StepComplete método para o objeto que o depurador tinha registrado com o tempo de execução.

  5. O depurador o thread etapas 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 corrente.

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

  • O depurador ignora opcionalmente depuração em código nativo. O depurador chama a ICorDebugStepper::StepOut método para ignorar o código nativo revisão até que o quadro anterior seja reativado. A API de depuração chama o ICorDebugManagedCallback::StepComplete método quando o código gerenciado é restabelecido.

  • O depurador, opcionalmente, as etapas para a próxima seção do código gerenciado. O depurador chama a ICorDebugStepper::Step método, de modo que o controle é retornado para o depurador quando o quadro anterior de código gerenciado é 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 corrente.

  • A API de depuração informa o depurador que ele é depuração em 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 exceções são tratadas:

  1. O CLR informa o depurador que ocorreu uma exceção de primeira chance. A API de depuração chama o ICorDebugManagedCallback::exceção método a ICorDebugManagedCallback interface que o depurador registrado com o tempo de execução.

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

  3. O depurador obtém o ICorDebugObjectValue objeto para a exceção. O depurador chama a QueryInterface método para obter o ICorDebugObjectValue objeto para a 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 apenas continua.

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

  7. O usuário decide a exceção é irrelevante. O depurador chama a ICorDebugThread::ClearCurrentException método para o segmento corrente ser depurado. Este método limpa a exceção e impede que a exceção de ser lançada.

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

Consulte também

Outros recursos

Conceitos chave na API de depuração

Visão geral sobre depuração do CLR

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