Compartilhar via


Recursos da API de depuração

Este tópico fornece uma visão geral da funcionalidade que fornecem os serviços de depuração do tempo de execução (CLR) linguagem comuns. Ele inclui as subseções a seguir:

Anexando a ou iniciar um programa

Controlando a Execução

Examinando o estado de programa

Modificando o estado de programa

Usando o edição e continuar

Avaliação de funções

Injetando código dinamicamente

Anexando a ou iniciar um programa

O CLR permite anexar o depurador a um programa em execução ou iniciar um processo. O CLR depuração de serviços suporte just-in-time (JIT) depuração, permitindo que você anexe o depurador a um programa que lança uma exceção sem tratamento. No entanto, um programa que não está sendo executado no modo depurável pode ter menos informações de depuração disponível. Executar um programa pode sempre propriamente dito no modo depurável para evitar esse problema. Para obter mais informações sobre o modo depurável, consulte o seguinte:

Controlando a Execução

Os serviços de depuração CLR fornecem várias maneiras de controlar a execução de um programa. Elas incluem pontos de interrupção, passo a passo, notificação de exceção, a avaliação da função e outros eventos relacionam à inicialização e desligado de um programa.

API de depuração CLR fornece controle de execução somente para código gerenciado. Se você executar o controle de execução em código não gerenciado, você deve implementar essa funcionalidade separadamente no seu depurador.

Pontos de interrupção

Você pode criar pontos de interrupção especificando o código e a Microsoft intermediate linguagem (MSIL) ou o deslocamento nativo do local onde deve ocorrer a quebra. O depurador, em seguida, será notificado quando o ponto de interrupção é encontrado. A API de depuração não diretamente o suporte pontos de interrupção condicionais; um pode depurador implementá-las, avaliando uma expressão em resposta a um ponto de interrupção e decidir se deve informar ao usuário da parada.

Revisão

Os serviços de depuração CLR fornecem uma ampla variedade de funcionalidades de revisão. Um programa pode percorrer uma instrução de código por vez (revisão único) ou um intervalo de instruções ao mesmo time (intervalo de revisão). Ele pode ignorar, entrar em ou para a etapa de uma função. Os serviços de depuração CLR também podem notificar o depurador se ocorrer uma exceção que interrompe a operação de revisão.

Embora os serviços de depuração não oferecem diretamente suportam etapas através do código não gerenciado, eles serão fornecem retornos de chamada quando uma operação de revisão atinge o código não gerenciado, manualmente fora de controle para o depurador. Eles também fornecem funcionalidade que permite que o depurador determinar quando o código gerenciado está prestes a ser inseridos no código não gerenciado.

O CLR não fornece diretamente a revisão do nível do código-fonte. Um depurador pode fornecer essa funcionalidade usando a revisão intervalo juntamente com suas próprias informações de mapeamento de fonte. Você pode usar as interfaces de armazenamento de símbolo para obter informações de nível de código-fonte. Para obter mais informações sobre essas interfaces, consulte Diagnóstico símbolo Store (referência de API não gerenciada).

Exceções

Os serviços de depuração CLR permitem um depurador ser informado de exceções de primeira chance e segunda chance em código gerenciado. O objeto gerado está disponível para inspeção em cada ponto.

O CLR não manipula exceções nativas em código não gerenciado, a menos que eles se propaguem para código gerenciado. No entanto, você poderá usar os serviços de depuração do Win32 que são compartilhados com os serviços de depuração CLR para lidar com exceções não gerenciadas.

Eventos de programa

Os serviços de depuração CLR notificam um depurador quando ocorrerem muitos eventos de programa. Esses eventos incluem a criação do processo e sair, criação do thread e sair, criação de domínio do aplicativo e sair, assembly carregar e descarregar o módulo de carregar e descarregar e carregamento e descarregamento de classe. Para garantir o mercadoria desempenho, você pode desabilitar o carregamento de classe e descarregar eventos para um módulo. Por padrão, eventos de classe para carregar e descarregar estão desabilitados.

thread Controle

Os serviços de depuração CLR fornecem interfaces para suspender e retomar threads individuais (gerenciado).

Examinando o estado de programa

Os serviços de depuração CLR fornecem uma maneira detalhada para inspecionar as partes de um processo executando código gerenciado quando o processo estiver em um estado de parado. Um processo pode ser olhado para obter uma lista de segmentos físicos.

Um segmento pode ser examinado para inspecionar seus telefonar pilha. Um thread telefonar pilha é decomposta em dois níveis: em cadeia nível e no nível de registro de ativação. Primeiro, a pilha de chamadas é decomposta em cadeias. Uma cadeia é um segmento de pilha contíguo telefonar lógico que contém quadros de pilha completamente gerenciado ou. Além disso, todos os gerenciado telefonar quadros em uma cadeia única compartilham o mesmo contexto CLR. Uma cadeia pode ser uma gerenciado ou un gerenciado.

Cada cadeia gerenciada pode ser decomposta além para os quadros de pilha única. Cada registro de ativação representa uma chamada de método. Você pode consultar um registro de ativação para obter o código que está sendo executado ou para obter seus argumentos, variáveis locais e registradores nativo.

Uma cadeia não gerenciada não contém quadros de pilha. Em vez disso, ele fornece o intervalo de endereços de pilha alocadas para código não gerenciado. Ele é um depurador de código não gerenciado para decodificar a parte da pilha não gerenciado e fornecer um rastreamento de pilha.

ObservaçãoObservação:

Serviços de depuração CLR não Su pport o conceito de variáveis locais sistema autônomo existirem no código-fonte. Cabe ao depurador para mapear as variáveis locais para suas alocações .

Os serviços de depuração CLR também oferecem acesso global, estática de classe e variáveis locais de thread.

Modificando o estado de programa

O CLR depuração de serviços permite um depurador de alterar o local físico do ponteiro de instrução durante a execução, embora isso possa ser uma operação perigosa. O ponteiro de instrução pode ser alterado com êxito quando as seguintes condições forem verdadeiras:

  • O ponteiro de instrução corrente e o ponteiro de instrução de destino estão em pontos da sequência. Pontos de sequência aproximadamente representam os limites de demonstrativo.

  • O ponteiro de instrução de destino não está localizado em um filtro de exceção, um catch bloco, ou um finally bloco.

  • Se dentro de um catch bloco, o ponteiro de instrução de destino não está fora do catch bloco.

  • O ponteiro de instrução de destino está no mesmo quadro em que o ponteiro de instrução corrente.

Quando altera a localização física do ponteiro de instrução, variáveis no local corrente do ponteiro de instrução serão mapeadas para as variáveis no local do ponteiro de instrução de destino. Lixo coleção referências no local do ponteiro de instrução de destino serão inicializadas corretamente.

Depois que o ponteiro de instrução é alterado, sistema autônomo serviços de depuração CLR marcar qualquer informação armazenada em cache de pilha sistema autônomo inválido e atualizar sistema autônomo informações na próxima vez que for necessário. Depuradores ponteiros para informações de pilha sistema autônomo quadros e cadeias de cache devem atualizar essas informações após alterar o ponteiro de instrução.

O depurador também pode modificar os dados de um programa quando o programa é interrompido. O depurador pode alterar os argumentos e variáveis locais da função quando a função está sendo executado, de maneira semelhante à inspeção. O depurador também pode atualizar campos de matrizes e objetos, sistema autônomo campos estático e variáveis global.

Usando o edição e continuar

Edição e continuação é um recurso que possibilita a ser no meio de uma sessão de depuração, edite o código-fonte e recompilar a origem modificada e continuar a sessão de depuração sem ter que executar novamente o executável do início. De uma perspectiva funcional, edição and Continue fornece a capacidade de modificar o código que está sendo executado no depurador, preservando o resto do estado de time de execução do executável que está sendo depurado.

Avaliação de funções

Para avaliar expressões de usuário e propriedades dinâmicas de objetos, um depurador precisa de uma forma para executar o código do processo que está sendo depurado. Os serviços de depuração CLR permitem o depurador tornar uma função ou método de telefonar e fazer com que ele executa dentro do processo de depuração.

O CLR permite que o depurador anular essa operação, porque pode ser perigoso (por exemplo, ele pode disparar um deadlock com o código existente). Se a avaliação é interrompida com êxito, o segmento é tratado sistema autônomo se a avaliação nunca ocorreu, exceto para todos sistema autônomo efeitos lado variáveis locais avaliação parcial. Se a função chama código não gerenciado ou bloqueia de alguma maneira, talvez seja impossível finalizar a avaliação.

Quando a avaliação da função for concluída, o CLR usa um retorno de chamada para notificar o depurador se a avaliação foi concluída normalmente ou a função emitiu uma exceção. Você pode usar ICorDebugValue and ICorDebugValue2 métodos para inspecionar os resultados de uma avaliação.

O thread no qual a avaliação da função está ocorrer deve ser interrompido em código gerenciado, em um ponto que é seguro para lixo coleção. (Avaliação da função também é permitida para exceções não tratadas.) No código não otimizado, esses pontos de seguros são muito comuns; a maioria das operações no nível da MSIL etapa ou ponto de interrupção serão concluída em um. No entanto, esses pontos podem ser raros no código otimizado. Às vezes, uma função inteira pode não ter todos os pontos de seguros. A freqüência de pontos que são seguros para a coleta de lixo irá variar de função à função. Mesmo em código não otimizado, é possível parar em um. No código de otimizado ou não otimizado, a ICorDebugController::Stop método raramente cair em um ponto de seguro.

O CLR depuração de serviços irá configurar uma nova cadeia no thread para iniciar uma avaliação de função e chamar a função solicitada. Assim que a avaliação é iniciada, todos sistema autônomo aspectos da API de depuração estão disponível: controle de execução, inspeção, a avaliação da função e assim por diante. Avaliações aninhadas são suportadas e pontos de interrupção são tratados sistema autônomo de costume.

Injetando código dinamicamente

Alguns depuradores permitem que um usuário inserir instruções arbitrárias no Imediata janela e executar as instruções. Os serviços de depuração CLR oferecem suporte a esse cenário. Em motivo, não existem restrições em que o código que você pode inserir dinamicamente. (Por exemplo, não-local goto instruções não são permitidas.)

Inclusão de código dinâmico é implementado usando uma combinação de operações de edição e continuação e avaliação de função. O código seja injetado é encapsulado em uma função e injetado pelo usando edição e continuação. A função injetada, em seguida, é avaliada. Se desejar, você pode fornecer a função de wrapper com argumentos que são declarados ByRef para que efeitos colaterais sejam imediatas e permanentes.

Consulte também

Outros recursos

Depuração no .NET estrutura

Visão geral sobre depuração do CLR

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