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:
O depurador obtém um objeto de módulo para determinada função. As chamadas do depurador do ICorDebugAppDomain::GetModuleFromMetaDataInterface método com a interface de metadados para obter um ICorDebugModule o objeto para o módulo da função.
O depurador obtém um objeto de função determinada função chamando o ICorDebugModule::GetFunctionFromToken método.
O depurador obtém o objeto de código para determinada função chamando o ICorDebugFunction::GetILCode método.
O depurador cria um ponto de interrupção no código gerenciado, chamando o ICorDebugCode::CreateBreakpoint método com um deslocamento específico. CreateBreakpointRetorna uma instância de ICorDebugBreakpoint. O ponto de interrupção é criado no estado ativo.
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 notifica o depurador quando um thread atinge o ponto de interrupção, chamando o ICorDebugManagedCallback::Breakpoint retorno de chamada.
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.
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.
O depurador etapas o thread chamando o ICorDebugStepper::Step método.
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 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.
O depurador etapas o thread novamente chamando o ICorDebugStepper::Step método.
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:
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.
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).
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.
O depurador obtém a classe do objeto de exceção foi acionada ao chamar o ICorDebugObjectValue::GetClass método.
O depurador decide ignorar a exceção e continua.
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.
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.
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