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.
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:
O depurador obtém um objeto de módulo para determinada função. O depurador chama a ICorDebugAppDomain::GetModuleFromMetaDataInterface método com a interface de metadados para obter um ICorDebugModule objeto para módulo a função.
O depurador obtém um objeto de função para a função determinada chamando o ICorDebugModule::GetFunctionFromToken método.
O depurador obtém o objeto de código para a função determinada 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. CreateBreakpoint Retorna uma instância do 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 corrente.
A API de depuração notifica o depurador quando um thread atinge o ponto de interrupção, chamando o ICorDebugManagedCallback::Breakpointretorno de chamada .
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.
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.
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 corrente.
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.
O depurador o thread etapas 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 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:
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.
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).
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.
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 apenas continua.
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.
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.
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