por 3 Leaf Solutions
O Edit and Continue (aqui chamado de EC) é um novo recurso de depuração introduzido no Visual C# 2005. Ele permite fazer alterações no código durante a depuração de um aplicativo e aplicá-las sem ter de encerrar a execução, recompilar e executar novamente o aplicativo.
Neste artigo, você verá o que é o EC e acompanhará uma sessão de depuração com o EC. No final, o artigo examinará a melhor forma de usar o suporte ao EC no C#.
O que é o Edit and Continue
O EC é um novo recurso que permite aos desenvolvedores de C# corrigir de modo muito mais produtivo determinados tipos de erros no código. Tradicionalmente, ao identificar um erro em seu aplicativo, você interrompe o aplicativo, altera o código e faz a recompilação. No entanto, com o EC, não é mais necessário interromper o aplicativo e recompilar.
Quando o código é alterado com o EC, o aplicativo em execução é modificado na memória. O estado do aplicativo é preservado, o que significa que todas as variáveis retêm o mesmo valor, todas as conexões de bancos de dados permanecem abertas e assim por diante. É possível continuar o aplicativo do mesmo ponto, mas já utilizando o novo código. Isso significa que você pode escrever o código e fazer alterações muito mais rapidamente do que antes. Este recurso também é útil durante o desenvolvimento baseado em testes. Quando um teste falha, você pode definir um ponto de interrupção no código incorreto e percorrê-lo para determinar onde o erro está ocorrendo. Dependendo do erro, talvez seja possível corrigi-lo imediatamente e continuar a execução, para ver se o teste avança.
Como o Edit and Continue ajuda os desenvolvedores?
Imagine que você esteja depurando um aplicativo complexo do Windows Forms. Você fez algumas alterações no código e está percorrendo o aplicativo para ver se elas funcionam da forma esperada. De repente, você percebe que cometeu um pequeno erro. Uma consulta SQL não foi escrita corretamente. Maldizendo a sorte, você interrompe o aplicativo, faz a correção e começa tudo outra vez.
Esse é especificamente o tipo de cenário com o qual o EC lida. Geralmente, os desenvolvedores de C# trabalham em um ciclo de codificação-compilação-depuração. No entanto, isso significa que geralmente perde-se muito tempo recompilando o aplicativo inteiro, mesmo que apenas uma linha do código tenha sido alterada. O EC muda essa abordagem e reduz o tempo necessário para a correção de erros. Por exemplo, no cenário acima, seria possível alterar apenas a consulta SQL e continuar executando o aplicativo do mesmo ponto.
O EC aumenta a produtividade dos desenvolvedores. Agora você pode se concentrar em escrever código e corrigir erros em vez de recompilar o aplicativo repetidamente para trazê-lo de volta ao mesmo estado.
Usando o Edit and Continue
A seguir, examinaremos alguns cenários de uso de exemplo. Eles incluem algumas das tarefas comuns freqüentemente executadas com o EC.
Projeto de base
Inicie o Visual C# 2005 Express Edition e crie um novo aplicativo de console. O aplicativo básico padrão foi gerado para você com um método Main. Não é preciso fazer mais nada para habilitar o recurso EC. Ele está ativo por padrão.
Alterando variáveis
Comece com um tradicional exemplo “Hello World”. Faça as alterações mostradas abaixo no método Main.
static void Main(string[] args)
{
string s = “Hello World”;
Console.WriteLine(s);
}
Defina um ponto de interrupção na chamada do método Console.WriteLine. Selecione o comando de menu Debug | Start (Depurar | Iniciar) e execute o aplicativo. O aplicativo alcança o ponto de interrupção e ocorre uma pausa na execução.
Agora, digamos que você queira quebrar a tradição e escrever alguma coisa diferente de “Hello World” no console. Normalmente, seria necessário interromper o aplicativo, fazer a alteração e reiniciar. No entanto, isso não é necessário, graças ao EC. Com o aplicativo ainda em pausa, altere a seqüência de caracteres “Hello World” para “Edit and continue rocks!”.
string s = “Edit and continue rocks!”;
Da mesma forma que na versão anterior do Visual Studio, é possível mover o ponto de execução para a linha que você deseja executar, o que oferece novas possibilidades impressionantes quando usado em conjunto com o EC. Nesse caso, é necessário fazer com que o código de atribuição dessa seqüência de caracteres seja executado novamente. Para isso, mova o ponto de execução para a linha na qual foi feita a alteração, arrastando a ponta de seta amarela que aparece na margem. Se você já estava no meio de uma função, outra opção seria simplesmente editar o valor na janela Locals (Locais), Watch (Inspeção) ou Command (Comando).

Figura 1 - Editando o código
Pressione F5 e execute o aplicativo. Se você observar a barra de status, verá mensagens à medida que as alterações do código forem compiladas e aplicadas. Na janela do console, agora você vê Edit and continue rocks! em vez de Hello World. Ao contrário das versões anteriores do C#, não é necessário interromper e recompilar o aplicativo para fazer essa alteração.
Alterando o código
A capacidade do EC não é apenas a de alterar variáveis de seqüência de caracteres. Vamos examinar um cenário em que o E&C é usado para corrigir um erro comum. Trabalhando com o mesmo projeto, altere o código de forma que ele corresponda ao seguinte trecho de código:
static void Main(string[] args)
{
string s = “Hello World”;
for(int i=0; i <= s.Length ; i++)
{
Console.Write( s.Substring(i, 1) );
}
}
Defina um ponto de interrupção na chamada do método Console.Write e execute o aplicativo, usando o comando de menu Debug | Start (Depurar | Iniciar).
Este exemplo um tanto forçado faz a mesma coisa que o primeiro programa, mas tem um pequeno erro no loop for. É possível corrigi-lo sem interromper e recompilar. Com o aplicativo ainda em pausa, altere a declaração do loop for como a seguir e execute o aplicativo.
for (int i=0; i < s.Length; i++)
Você verá Code changes were applied successfully (Alterações no código aplicadas com êxito) na área de status e a saída esperada (nesse caso, Hello World) na janela do console assim que as alterações forem aplicadas pela execução de uma ação do depurador, como depuração passo a passo, continuação ou definição da próxima instrução. As alterações de código foram aplicadas ao executável na memória.

Figura 2 - Mensagem de status ao aplicar alterações no código
Como funciona o Edit and Continue?
Embora o EC seja simples de usar, o CLR e o compilador precisam funcionar juntos para executar o trabalho pesado em segundo plano. Quando um arquivo é editado no IDE durante uma sessão de depuração, o compilador primeiramente verifica se a alteração é permitida ou não. Se não for possível executar a alteração, você verá uma caixa de diálogo como a da Figura 3.

Figura 3 - Caixa de mensagem exibida quando é feita uma alteração não permitida
Um clique no botão Edit Code (Editar Código) o leva de volta à sessão de depuração para permitir a correção dos erros que impedem que a sessão continue. Você deve escolher essa opção se os erros que impedem o EC de continuar forem erros de compilação. Um clique no botão Stop Debugging (Interromper Depuração) encerra a sessão de depuração atual e volta ao modo de design. Escolha essa opção se os erros detectados forem alterações necessárias. O compilador fornece as diferenças de IL e de metadados, utilizadas para substituir partes do IL e dos metadados existentes na memória. As diferenças de IL e de metadados referem-se simplesmente ao intervalo usado para inserir o código editado. Se os métodos editados tiverem sido compilados por JIT no código x86 nativo, eles serão substituídos pelo novo código x86.
Limitações do Edit and Continue
O princípio básico para fazer alterações com o EC é que é possível alterar praticamente qualquer coisa dentro do corpo de um método, portanto não há suporte a alterações de maior escopo, que afetem o código em nível de método ou público. Alguns exemplos de alterações para as quais não há suporte são:
Alteração do nome de uma classe.
Adição ou remoção de parâmetros de método.
Adição de campos públicos a uma classe.
Adição ou remoção de métodos.
Nesses casos, você verá uma linha ondulada abaixo do código incorreto. Se você tentar continuar enquanto existirem linhas onduladas no programa, receberá a mensagem exibida na Figura 4.

Figura 4 - Erro ao fazer uma alteração à qual o E&C não oferece suporte
Definindo a próxima instrução
Nos exemplos deste artigo, você já estava ciente dos erros no código. No entanto, na prática, os erros muitas vezes são encontrados depois que já ocorreram. Assim como foi feito nos exemplos anteriores, você pode fazer as correções necessárias com o aplicativo ainda em execução.
Nesses casos, é importante lembrar que o EC não é uma máquina do tempo. Se você alterar qualquer variável, código de inicialização ou qualquer outro código que possa afetar o método em execução no momento, poderá usar o comando Set Next Statement (Definir Próxima Instrução) do menu de contexto para mover o ponteiro de execução para um ponto anterior no código. No entanto, o comando Set Next Statement nunca desfaz a execução do programa. Ele apenas move o ponto de execução. Lembre-se de que, quando são necessárias várias tentativas de depuração, você pode usar a janela Locals (Locais), Watch (Inspeção) ou Command (Comando) para trazer rapidamente um aplicativo a um estado desejado.
Conclusão
O EC foi incluído no Visual C# 2005 porque aumenta a produtividade do desenvolvedor, e este artigo ilustra os tipos de cenários nos quais o E&C pode ser vantajoso.
Um dos melhores aspectos do EC é que praticamente todos podem se beneficiar dele, independentemente do nível de habilidade ou de conhecimento do recurso. Todos nós podemos esperar por um desenvolvimento mais tranqüilo e com menos interrupções, resultando em um dia mais produtivo na vida de um desenvolvedor.
Alan
0 Respostas para “Usando o recurso Edit and Continue do C#”